Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизВопрос по автозапуску Найти похожие ветки
← →
Илья С. (2006-07-19 11:43) [0]Добрый день. У меня возникла проблема. Есть менюшка, в которой есть некая кнопка, запускающая вызов файла на удаленном сервере. Вобщем, тамошний лог с обновлениями. Как можно сделать так, чтобы при запуске программы эта кнопка, грубо говоря, автоматически нажималась. То есть можно было запустить программу, она автоматически запросила файл на удаленном сервере. Вот листинг мэйна:
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 - и есть проблема.
← →
SergP. (2006-07-19 11:58) [1]попробуй так:
procedure TMain.FormCreate(Sender: TObject);
begin
ac_thrd:= TAutoCheckThread.Create(false);
Button1Click(Button1);
end;
← →
Илья С. (2006-07-19 12:42) [2]Спасибо, 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 запустился так же автоматически.
← →
Илья С. (2006-07-19 13:09) [3]тут вся проблема еще заключается в том, чтобы прога должалась окончания обновления, вызванного бутоном1, после чего уже автоматом запустила бутон 2. Делей не походит, ибо у всех разные скорости скачки...
← →
medved_68 © (2006-07-19 14:00) [4]Делаешь так:
> 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;
← →
Ketmar © (2006-07-19 16:33) [5]доблестные китайские комсомольцы... имеешь исходник -- оформи всё, что тебе надо, как отдельные процедуры и вызывай.
← →
IceBeerg © (2006-07-20 11:15) [6]
> 2 Илья С. (19.07.06 13:09) [3]
Да просто промониторь время последнего изменения файла...
1) получил до нажатия певого батона
2) ждеш пока изменится - в цикле или в отдельном потоке или в таймере
3) время изменилось - жмеш второй батон
← →
Virgo_Style © (2006-07-20 11:20) [7]Если вызов непосредственно в OnCreate нежелателен, можно в OnCreate послать сообщение (кнопке - о нажатии или программе - пользовательское)
← →
Илья С. (2006-07-21 16:34) [8]
> Делаешь так:
> > 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) [9]
> Делаешь так:
> > 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;
Спасибо, это сработало.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c