Главная страница
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.011 c
1-65497
АТ
2003-10-08 10:32
2003.10.20
поля в TPrinter


4-65682
Aleksandr
2003-08-01 17:11
2003.10.20
Объясните мне работу с TEvent ... и WaitForSingleObject


14-65576
BOA_KAA
2003-10-02 13:13
2003.10.20
Цветной принтер


4-65676
Anikul
2003-08-11 22:22
2003.10.20
Как взять текст из ДОС-окна


8-65556
mao
2003-06-20 07:12
2003.10.20
MediaPlayer теряет картинку :(