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

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

Вопрос по автозапуску [D7, WinXP]


Илья С. ©   (2006-07-19 11:43:00) 

Добрый день. У меня возникла проблема. Есть менюшка, в которой есть некая кнопка, запускающая вызов файла на удаленном сервере. Вобщем, тамошний лог с обновлениями. Как можно сделать так, чтобы при запуске программы эта кнопка, грубо говоря, автоматически нажималась. То есть можно было запустить программу, она автоматически запросила файл на удаленном сервере. Вот листинг мэйна:

unit main1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan, ComCtrls, jpeg, ExtCtrls, Menus, ShellAPI;

type
 TMain = class(TForm)
   Image1: TImage;
   ProgressBar1: TProgressBar;
   XPManifest1: TXPManifest;
   Memo1: TMemo;
   Button1: TButton;
   Button2: TButton;
   Label1: TLabel;
   PopupMenu1: TPopupMenu;
   Hidelogwindow1: TMenuItem;
   Button3: TButton;
   procedure Label2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Hidelogwindow1Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   update_ip: string;
   thrd: TUpdateThread;
   ac_thrd: TAutoCheckThread;
 end;

var
 Main: TMain;

implementation

{$R *.dfm}

procedure TMain.Label2Click(Sender: TObject);
begin
 // launch qwerty
end;

procedure TMain.Button1Click(Sender: TObject);
begin
 Button1.Visible:= False;
 Button2.Visible:= False;
 Button3.Visible:= True;
 Memo1.Visible:= True;
 update_ip:= ****;
 thrd:= TUpdateThread.Create(false);
end;

procedure TMain.Hidelogwindow1Click(Sender: TObject);
begin
 Memo1.Visible:= False;
end;

procedure TMain.Button3Click(Sender: TObject);
begin
 thrd.Terminate;
end;

procedure TMain.FormCreate(Sender: TObject);
begin
 ac_thrd:= TAutoCheckThread.Create(false);
end;

Вот эта самая Бутон1 - и есть проблема.


Илья С.   (2006-07-21 16:34:00) [1]


> Делаешь так:
> > Button1Click(Button1);
>
>
> далее ждешь окончания работы thrd:= TUpdateThread.Create(false);
>
> и Button2Click(Button2);
> А ожидать можно так:
>
> > procedure TMain.Button1Click(Sender: TObject);
> > begin
> >  Button1.Visible:= False;
> >  Button2.Visible:= False;
> >  Button3.Visible:= True;
> >  Memo1.Visible:= True;
> >  update_ip:= ****;
> >  thrd:= TUpdateThread.Create(True);
> thrd.OnTerminate:= PotokEnd;
> thrd.Resume;
> > end;
>
> procedure TMain.PotokEnd(Sender:TObject);
> begin
> Button2Click(Button2);
> end;
> Тогда по окончанию потока TUpdateThread у тебя выполнится
> Button2Click, Если конечно FreeOnTerminate потока TUpdateThread:
> =True;


Спасибо, это сработало.


Илья С.   (2006-07-21 16:34:00) [2]


> Делаешь так:
> > Button1Click(Button1);
>
>
> далее ждешь окончания работы thrd:= TUpdateThread.Create(false);
>
> и Button2Click(Button2);
> А ожидать можно так:
>
> > procedure TMain.Button1Click(Sender: TObject);
> > begin
> >  Button1.Visible:= False;
> >  Button2.Visible:= False;
> >  Button3.Visible:= True;
> >  Memo1.Visible:= True;
> >  update_ip:= ****;
> >  thrd:= TUpdateThread.Create(True);
> thrd.OnTerminate:= PotokEnd;
> thrd.Resume;
> > end;
>
> procedure TMain.PotokEnd(Sender:TObject);
> begin
> Button2Click(Button2);
> end;
> Тогда по окончанию потока TUpdateThread у тебя выполнится
> Button2Click, Если конечно FreeOnTerminate потока TUpdateThread:
> =True;


Спасибо, это сработало.


Virgo_Style   (2006-07-20 11:20:00) [3]

Если вызов непосредственно в OnCreate нежелателен, можно в OnCreate послать сообщение (кнопке - о нажатии или программе - пользовательское)


IceBeerg   (2006-07-20 11:15:00) [4]


> 2 Илья С.   (19.07.06 13:09) [3]

Да просто промониторь время последнего изменения файла...
1) получил до нажатия певого батона
2) ждеш пока изменится - в цикле или в отдельном потоке или в таймере
3) время изменилось - жмеш второй батон


Ketmar   (2006-07-19 16:33:00) [5]

доблестные китайские комсомольцы... имеешь исходник -- оформи всё, что тебе надо, как отдельные процедуры и вызывай.


medved_68   (2006-07-19 14:00:00) [6]

Делаешь так:
> Button1Click(Button1);


далее ждешь окончания работы thrd:= TUpdateThread.Create(false);
и Button2Click(Button2);
А ожидать можно так:

> procedure TMain.Button1Click(Sender: TObject);
> begin
>  Button1.Visible:= False;
>  Button2.Visible:= False;
>  Button3.Visible:= True;
>  Memo1.Visible:= True;
>  update_ip:= ****;
>  thrd:= TUpdateThread.Create( True);
thrd.OnTerminate:= PotokEnd;
thrd.Resume;
> end;

procedure TMain.PotokEnd(Sender:TObject);
begin
Button2Click(Button2);
end;
Тогда по окончанию потока TUpdateThread у тебя выполнится Button2Click, Если конечно FreeOnTerminate потока TUpdateThread:=True;


Илья С.   (2006-07-19 13:09:00) [7]

тут вся проблема еще заключается в том, чтобы прога должалась окончания обновления, вызванного бутоном1, после чего уже автоматом запустила бутон 2. Делей не походит, ибо у всех разные  скорости скачки...


Илья С.   (2006-07-19 12:42:00) [8]

Спасибо, SergP. Это сработало. Теперь еще один момент: надо чтобы по тому же принципу запускался .exe файл, лежащий на локальном компютере. Вот кусочек кода:

procedure TMain.Button2Click(Sender: TObject);
begin
 if ShellExecute(handle, 'Open', 'system\dbclear.exe, '', 'system\', SW_SHOWNORMAL) <= 32 then begin
   MessageBox(handle, 'Error: File ..\system\dbclear.exe not found!', 'Error: File not found, MB_OK+MB_ICONERROR);
 end;
end;

Данный кусок следует за вышеприведенным. Нужно, чтобы и этот бутон 2 запустился так же автоматически.


SergP.   (2006-07-19 11:58:00) [9]

попробуй так:

procedure TMain.FormCreate(Sender: TObject);
begin
  ac_thrd:= TAutoCheckThread.Create(false);
  Button1Click(Button1);
end;


Наверх

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