Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Воспрос по переводу на 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо