Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать, что файл полностью загрузился? [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);


А это что за зверь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо