Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.07.2006, 11:48
Илья С. Илья С. вне форума
Прохожий
 
Регистрация: 19.07.2006
Сообщения: 10
Репутация: 10
По умолчанию Вопрос по автозапуску

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

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 - и есть проблема.
Ответить с цитированием
  #2  
Старый 19.07.2006, 11:54
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

В OnCreate или OnShow (короче, там, где нужно) напиши

Button1.Click;

или

Button1.OnClick( Sender );
Ответить с цитированием
  #3  
Старый 19.07.2006, 11:56
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

На событие FormShow повешай вызов
Код:
Button1Click(nil);
Ответить с цитированием
  #4  
Старый 19.07.2006, 12:56
Илья С. Илья С. вне форума
Прохожий
 
Регистрация: 19.07.2006
Сообщения: 10
Репутация: 10
По умолчанию

Спасибо. Вопрос решился =) теперь еще один. В принципе тоже самое, надо чтобы по тому же принципу запускался .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 запустился так же автоматически.
Ответить с цитированием
  #5  
Старый 19.07.2006, 13:10
Илья С. Илья С. вне форума
Прохожий
 
Регистрация: 19.07.2006
Сообщения: 10
Репутация: 10
По умолчанию

тут вся проблема еще заключается в том, чтобы прога должалась окончания обновления, вызванного бутоном1, после чего уже автоматом запустила бутон 2. Делей не походит, ибо у всех разные скорости скачки...
Ответить с цитированием
  #6  
Старый 19.07.2006, 17:21
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Посмотри пример и скажи, это то, чего ты хотел?

primer.zip
Ответить с цитированием
  #7  
Старый 19.07.2006, 18:00
Илья С. Илья С. вне форума
Прохожий
 
Регистрация: 19.07.2006
Сообщения: 10
Репутация: 10
По умолчанию

да, совершенно верно. Теперь надо сообразить,как это все интегрировать... Просто я далеко не дока в программировании. На работе сказали "делай", а то что я делфей не занимался лет 6 - это мало кого волнует... =)
Ответить с цитированием
  #8  
Старый 20.07.2006, 14:37
Илья С. Илья С. вне форума
Прохожий
 
Регистрация: 19.07.2006
Сообщения: 10
Репутация: 10
По умолчанию

Так, интегрировал, все замечательно. Одно но - здесь идет просчет по i до 5000. А мне надо, чтобы как нажалась кнопка 1 и ЗАВЕРШИЛСЯ прцоесс обновления, запустилась кнопка 2. То есть надо, вероятно, придумать флаг... Я вот что подумал. У меня есть такой кусочек кода

Info:= 'Обновление завершено успешно.';
Synchronize(SetInfo);
Synchronize(OK);

Как сделать так, чтобы к этому инфо, то есть к его появлению, привязать нажимание бутона2?
Ответить с цитированием
  #9  
Старый 20.07.2006, 20:46
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Ты с примером внимательно разбирался? Там флаг и используется. Перед запуском потока флаг сбрасывается.

Код:
CanStop := false
После запуска потока программа входит в бесконечный цикл с обработкой сообщений. В этом цикле она ожидает момента, когда поток, закончивший свою работу, установит сброшенный флаг (CanStop).

Код:
while not CanStop do
   Application.ProcessMessages;
Поток заканчивает свою работу тогда, когда полностью отработала процедура Execute созданного потока. Неважно, что происходит внутри Execute, просто в самом конце нужно установить флаг (CanStop), сброшенный перед созданием потока.

Код:
procedure Taaa._Stop;
begin
   CanStop := true;
end;

procedure Taaa.Execute;
begin
   ...
   Synchronize( _Stop );
end;
Как только флаг устоновлен, твоя программа точно знает, что поток завершен. Теперь можешь программно нажать на нужную тебе кнопку.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter