![]() |
|
|
Регистрация | << Правила форума >> | 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 TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; Последний раз редактировалось AleD, 09.11.2009 в 22:30. |
#6
|
|||
|
|||
![]() Цитата:
|