![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, что файл полностью загрузился? [D6, WinXP]
17Landgraf © (2006-07-09 12:50:00)Добрый день! Подскажите, пожалуйста.
Задача следующая: открыть текстовый файл и прокрутить scroll в конец файла. Для установки scroll в конец файла использую свою процедуру ScrollDown(). Файлы весят по разному - от 300КБ до 28 МБ. Вся загвоздка в том, что если использовать процедуру ScrollDown() сразу после открытия файла, то процедура не срабатывает, (файл открывается в начале). Если подождать, когда файл полностью загрузится и вызвать процедуру, тогда все нормально(scroll стоит в конце файла). Чтобы процедура срабатывала правильно, необходимо дождаться пока файл полностью загрузится. Собственно вопрос: как узнать, что файл полностью загрузился? Скорость загрузки, соответственно зависит от размера файла.
Такой код работает не правильно:
ShellExecute(0,nil,PChar(StringName),nil,PChar('D:\'),SW_SHOW);
ScrollDown(GlobalName);
17Landgraf (2006-07-09 14:47:00) [1]To Leonid Troyanovsky ©
Ага спасибо с WinExec работает!
Еще мне подсказали можно использовать CreateProcess+WaitForInputIdle
Leonid Troyanovsky (2006-07-09 13:42:00) [2]
> 17Landgraf (09.07.06 13:38) [6]
> У меня есть проблема на определенном участке декомпозиции
> моей задачи.
Туманно. Т.е., управлять чужим EDIT начинающему проще,
чем сделать Memo1.Lines.LoadFromFile ?
--
Regards, LVT.
Leonid Troyanovsky (2006-07-09 13:39:00) [3]
> 17Landgraf (09.07.06 13:38) [6]
> Как мне в данной ситуации поможет WinExec?
Ну, а ты попробуй и доложи.
А там видно будет.
--
Regards, LVT.
17Landgraf (2006-07-09 13:38:00) [4]У меня есть проблема на определенном участке декомпозиции моей задачи. Программированием я начал заниматься не так давно, поэтому некоторые ответы мне могут быть не совсем понятны.
> Во-вторых, если уж так хочется в чужой, используй,
> например, WinExec.
Как мне в данной ситуации поможет WinExec?
Leonid Troyanovsky (2006-07-09 13:31:00) [5]
> 17Landgraf (09.07.06 13:26) [4]
> У меня нет проблем с вызовом файла! Управление Edit-ом тоже
> происходит нормально, но если текстовый файл (notepad) полнотью
> загрузился! Мне надо только узнать, когда произойдет полная
> загрузка фала и уже после этого вызвать мою процедуру ScrollDown.
Если у тебя нет проблем, тогда чего же ты
1) пишешь сюда.
2) не читаешь ответы
--
Regards, LVT.
17Landgraf (2006-07-09 13:26:00) [6]У меня нет проблем с вызовом файла! Управление Edit-ом тоже происходит нормально, но если текстовый файл (notepad) полнотью загрузился! Мне надо только узнать, когда произойдет полная загрузка фала и уже после этого вызвать мою процедуру ScrollDown.
Leonid Troyanovsky (2006-07-09 13:18:00) [7]
> 17Landgraf (09.07.06 13:10) [2]
> Процедура которая скролит в конец файла!
Во-первых, проще прочитать файл в собственный TMemo,
чем управлять чужим EDIT.
Во-вторых, если уж так хочется в чужой, используй,
например, WinExec.
--
Regards, LVT.
17Landgraf (2006-07-09 13:10:00) [8]Процедура которая скролит в конец файла!
{процедура скролит в конец файла}
procedure ScrollDown(GlobalName:string);
var
Wnd,Child:Hwnd;
buff,title,c: array [0..127] of Char;
NameOfClass,s:string;
begin
Wnd := FindWindow('CiceroUIWndFrame',nil);;
while Wnd<>0 do
begin
GetClassName(Wnd,buff,sizeof(buff));
NameOfClass:=StrPas(buff);
if NameOfClass='Notepad' then
begin
GetWindowText(Wnd,title,sizeof(title));
if Pos(GlobalName,strpas(title))<>0 then
begin
Child := GetWindow(Wnd, GW_CHILD);
While Child <> 0 do
begin
if GetClassName(Child, C, SizeOf(C)) > 0 then
begin
s:= StrPas(C);
if S='Edit' then SendMessage(Child,WM_VSCROLL,SB_BOTTOM ,0);
end;
Child := GetWindow(Child, GW_HWNDNEXT);
end;
Break; //уходим из цикла
end;
end;
Wnd:= GetWindow(Wnd, gw_HWndNext);
end;
end;
GlobalName - Имя текстового файла
Мефисто (2006-07-09 13:06:00) [9]
> ScrollDown(GlobalName);
А это что за зверь?