Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

Воспрос по переводу на WinAPI - подскажите, пожалуйста.   Найти похожие ветки 

 
Andrey007   (2003-08-13 10:16) [0]

Как перевести строку 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;


 
имя   (2003-08-13 10:21) [1]

Удалено модератором
Примечание: Offtopic


 
Andrey007   (2003-08-13 10:26) [2]

Удалено модератором
Примечание: Offtopic


 
NAlexey ©   (2003-08-13 10:30) [3]

Удалено модератором
Примечание: Offtopic


 
Крот ©   (2003-08-13 11:26) [4]


> Andrey007 (13.08.03 10:16)


Мне кажется, стоит перенести ThreadProc вне твоей процедуры VTAllMouseMove. Не понятно, что происходит с процедурой ThreadProc, во время выхода из VTAllMouse. Кстати, если проект на VCL, что мешает использовать TThread?


 
Игорь Шевченко ©   (2003-08-13 13:12) [5]

Нельзя делать процедуру потока локальной.


 
Andrey007   (2003-08-14 10:30) [6]

Спасибо! Всё получилось.



Страницы: 1 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
3-65364
Дмитрий К.
2003-09-29 12:27
2003.10.20
Окрашивание фона в таблице по нажатию клавиши


3-65376
Малиновский Владимир
2003-09-26 16:27
2003.10.20
FireBird 2.0


9-65309
Alek Aaz
2003-04-15 12:54
2003.10.20
А пули летят, пули...


3-65327
Ренат
2003-09-30 08:27
2003.10.20
Значение типа дата в строковое поле


3-65323
AlexA
2003-09-30 16:57
2003.10.20
Как программно изменить путь источника данных ODBC?