Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

динамическое создание таймера перед запускм приложения   Найти похожие ветки 

 
GEN++ ©   (2005-02-14 23:46) [0]

В файле .dpr не получается
(выдается ошибка компиляции)
создать TTimer
Как сделать правильно?


program Project55;

uses
 Forms,
 Windows,
 extctrls,
 Classes,
 unit55 in "D:\Program Files\Borland\Delphi5\Bin\unit55.pas" {Form1};

{$R *.RES}
procedure    on_Timer(Sender:TObject);
begin
      //код обработчика
      fl:=false;
end;
var
h:HWND;
tm:TTimer;
fl:boolean;
begin
  Application.Initialize;
  fl:=true;
  tm:=TTimer.Create(Application);
  tm.Interval:=100;
  tm.OnTimer:=on_Timer;//<==  [Error] Project1.dpr(24):
                       // Incompatible types:
                       // method pointer and regular procedure
  tm.Enabled:=true;

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 while(fl) do application.ProcessMessages;
 tm.free;
 Application.Run;
end.


 
Palladin ©   (2005-02-14 23:54) [1]

1 Зачем тебе Application.Initialize два раза
2 TTimer можно создавать и без Application
3 OnTimer должент быть (как ты видимо прочитал и проникся) методом объкта, а не регулярной процедурой
4 И в конце концов вся та белебердень которую ты написал сводится к

Sleep(100)


 
Юрий Зотов ©   (2005-02-14 23:55) [2]

Обработчиком события объекта должен быть метод объекта, а не просто процедура.

Вообще говоря, из кода непонятно, почему бы просто не положить таймер на главную форму и получить то же самое без всяких проблем. Но если уж очень хочется, то напишите свой потомок TTimer, добавьте ему обработчик OnTimer и пусть обрабатывает сам себя.


 
Palladin ©   (2005-02-14 23:55) [3]

ЗЫ:
1 unit55 - :) ужас
2 а всетаки зачем тебе h:HWND
3 Application.ProcessMessages до Application.Run это классная идея!


 
GEN++ ©   (2005-02-15 00:11) [4]

>Palladin ©  
 второй Application.Initialize  - "опечатка"
 Sleep(100): нужна не задерка
>Palladin ©  
>Юрий Зотов ©
 
Суть следующая: после Application.CreateForm(TForm1, Form1);
до появления формы, на экран лезет окно, которое
в обработчике таймера должно быть убито.
В unite выше приведенное создание таймера проходит
нормально, а как быть здесь?

Можно запустить вместо таймера небольшое приложение,
но не хотелось бы


 
iskatel ©   (2005-02-15 00:17) [5]

while
FindWindow
ShowWindow


 
Alex Konshin ©   (2005-02-15 00:26) [6]

Суть следующая: после Application.CreateForm(TForm1, Form1);
до появления формы, на экран лезет окно, которое
в обработчике таймера должно быть убито.

Хм. Может проще и не создавать его?


 
GEN++ ©   (2005-02-15 00:27) [7]

>Palladin ©  
>unit55 - :) ужас
Не ужас, а страшная военная тайеа!!!
Вот если бы было: unit54 или unit56 - тогда бы
все, "расстрел на месте без суда и следствия...
      при задержании - огонь на поражение"

h:HWND - конечно нужно убрать в процедуру
>Application.ProcessMessages до Application.Run это классная
>идея!
береженого Бог бережет, как говорила монашка........


 
Юрий Зотов ©   (2005-02-15 00:29) [8]

> GEN++ ©   (15.02.05 00:11) [4]

> после Application.CreateForm(TForm1, Form1);
> до появления формы, на экран лезет окно, которое
> в обработчике таймера должно быть убито.

Какое окно? Откуда оно взялось? Зачем его убивать? И почему обязательно по таймеру?

> В unite выше приведенное создание таймера проходит
> нормально, а как быть здесь?

Вынести свой таймер в юнит. Можно в тот же, где Form1.

===========================

P.S.
До вызова Application.Run таймер все равно не сработает.


 
GEN++ ©   (2005-02-15 00:31) [9]

>Alex Konshin ©  
Убиенное окно создает условно бесплатный компонент
лежащий на форме Form1. При отладке программы "замучался"
его закрывать.


 
Palladin ©   (2005-02-15 00:33) [10]

кащунство...


 
GEN++ ©   (2005-02-15 00:35) [11]

>Юрий Зотов ©  
>До вызова Application.Run таймер все равно не сработает.

 Да, все гениальное простою Ваща правда.
Остается только внешнее приложение.


 
iskatel ©   (2005-02-15 00:36) [12]

да нах тебе таймер? засунь FindWindow в while? туда же sleep и ProcessMessages - т.е. прога будет ждать пока не появится окно, а там и убивай себе...


 
GEN++ ©   (2005-02-15 00:45) [13]

>iskatel ©  
>засунь FindWindow в while?
не катит: while будет выполняться толко после
закрытия "окна":  проверено. Потому и делаю таймер:
рано или поздно он окно закроет.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
6-1102941342
ingine
2004-12-13 15:35
2005.02.27
UDP redirect


6-1103499595
Beglec
2004-12-20 02:39
2005.02.27
Проблема с WinPcap.


1-1108454685
juice
2005-02-15 11:04
2005.02.27
Linker. Генерация C++ object files


4-1105013665
ScrewDriver
2005-01-06 15:14
2005.02.27
Проблема выгрузки DLL


1-1108031675
Gek1
2005-02-10 13:34
2005.02.27
Помогите побороть ошибку! И как работает свойство FreeOnTerminate





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский