![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Воспрос по переводу на WinAPI - подскажите, пожалуйста. [D5, Win2k]
Andrey007 © (2003-08-13 10:16:00)
Как перевести строку s:=Memo1.Lines[0] на WinAPI? Я вчера уже задавал этот вопрос, но модератор(ы?) почему-то стёрли эту тему. Поэтому напомню о чём шла речь.
Мне посоветовали несколько вариантов:
1) var s: array[0..4095] of Char;
begin
Word((@s)^) := SizeOf(s);
SendMessage(Memo1.Handle, EM_GETLINE, 0, Longint(@s));
...
end;
2) SetLength(S,SendMessage(Memo1.Handle,EM_LINELENGTH,
SendMessage(Memo1.Handle,EM_LINEINDEX,idx,0),0)+1);
SetLength(S,SendMessage(Memo1.Handle,EM_GETLINE,idx,LPARAM(S)));
3) GetWindowText(Memo1.Handle, Buf, SizeOf(Buf));
Все эти варианты давали Access Violation, поскольку вызывались в потоке. Делалось это так:
(VTAll - TMemo, RunThread - глобальная булевская переменная)
procedure AnalyzForm.VTAllMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
function ThreadFunc(p: Pointer): LongInt; stdcall;
begin
Result:=0; // idx:=0;
RunThread:=False;
// поток - здесь и надо перевести s:=VTAll.Lines[0] на WinAPI, чтобы не было Access Violation при обращении к VCL-объектам
RunThread:=True
end;
var hThread: THandle;
ThreadID: DWord;
begin
if RunThread then
begin
hthread:=CreateThread(nil,0,@ThreadFunc,nil,0,ThreadId);
if hthread = 0 then MessageBox(Handle, "No Thread", nil, MB_OK)
end
end;
Andrey007 (2003-08-14 10:30:00) [1]
Спасибо! Всё получилось.
Игорь Шевченко (2003-08-13 13:12:00) [2]
Нельзя делать процедуру потока локальной.
Крот (2003-08-13 11:26:00) [3]
> Andrey007 (13.08.03 10:16)
Мне кажется, стоит перенести ThreadProc вне твоей процедуры VTAllMouseMove. Не понятно, что происходит с процедурой ThreadProc, во время выхода из VTAllMouse. Кстати, если проект на VCL, что мешает использовать TThread?
NAlexey (2003-08-13 10:30:00) [4]
Удалено модератором
Примечание: Offtopic
Andrey007 (2003-08-13 10:26:00) [5]
Удалено модератором
Примечание: Offtopic
имя (2003-08-13 10:21:00) [6]
Удалено модератором
Примечание: Offtopic