![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
В общем следующая задача передо мной стояла! Надо было Считать и выводить на форму Размер выбранного файла! Через потоки и через WipApi функцию! Как я это пытался сделать
Код:
function MyProc(str: string):DWORD; var P : Pointer; i: integer; begin i:=GetFileSize(StrToCard(str),P); MainForm.Label1.Caption := intToStr(i); Result := 0; end; procedure TMainForm.BitBtn1Click(Sender: TObject); Var thID:DWORD; begin CreateThread(NULL, 0, MyProc, MainForm.Name.Text, 0, thID); end; И в общем то так не получается... Если так то ругается компилятор на строчку CreateThread вот таким матом Incompatible types: 'Variant' and 'Pointer' Но даже если я просто вызываю функцию MyProc(MainForm.Name.Text); мне выдаёт в ответ не размер файла а значение -1 !! Помогите пожалуйста кто нить.... Последний раз редактировалось Admin, 08.11.2009 в 22:16. |
|
#2
|
||||
|
||||
|
На счет создания нити это делается так:
Код:
function MyProc:bool;
begin
ShowMessage('hi');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateThread(nil,0,@Myproc, nil, 0, Id1);
end;Осознал ошибку? |
|
#3
|
||||
|
||||
|
а насчет функции MyProc(MainForm.Name.Text) , то тебе ей в качестве параметра надо передать строку с путем к файлу.
А ты передаешь черти че. |
|
#4
|
|||
|
|||
|
ну так mainform.name.text это и будет строка в которй путь к файлу...
|
|
#5
|
||||
|
||||
|
4 параметр в CreateThread это Pointer, указатель, а вы передаёте строку, тогда уж надо так:
Код:
function MyProc(str: pchar):DWORD; var P : Pointer; i: integer; begin i:=GetFileSize(StrToCard(str),P); MainForm.Label1.Caption := intToStr(i); Result := 0; end; procedure TMainForm.BitBtn1Click(Sender: TObject); Var thID:DWORD; begin CreateThread(NULL, 0, MyProc, pchar(MainForm.Name.Text), 0, thID); end; и кстати, установка переменных формы (vcl) из потока может (в определённых ситуациях) повиснуть оба потока, для этого нужно использовать функцию Synchronize Последний раз редактировалось AleD, 09.11.2009 в 22:30. |
|
#6
|
|||
|
|||
|
Цитата:
|