Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как использовать таймер без формы? 
:(
    Опции темы
MetalFan
Дата 20.4.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(source777 @  19.4.2008,  18:58 Найти цитируемый пост)
Насколько я помню SetTimer работает посредством сообщения WM_TIMER, или другими словами не будет он работать в приложении без форм/окон...

отчасти правильно понимаешь, НО:
Цитата(msdn)
You can process the message by providing a WM_TIMER case in the window procedure. Otherwise, DispatchMessage will call the TimerProc callback function specified in the call to the SetTimer function used to install the timer. 

т.о. если ты сам не обработаешь сообщение, то DispatchMessage (в петле обработки сообщений) вызовет колбэк функцию TimerProc.
собстно пример от THandle это прекрасно демонстрирует.

Добавлено через 1 минуту и 34 секунды
з.ы. в это частном примере, кстати, в вызове TranslateMessage нет необходимости


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
BeeMaster
Дата 24.4.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



Цитата(THandle @ 19.4.2008,  18:59)
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure OnMyTimer(Sender : TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  tim : TTimer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  tim := TTimer.Create(nil);
  tim.OnTimer := OnMyTimer;
end;

procedure TForm1.OnMyTimer(Sender: TObject);
begin
  ShowMessage('Timer arbaiten!!!!');
end;

end.



ЗЫ: 
BeeMaster, пожалуйста, используй кнопку "Код".

Почему у меня сообщение не выскакивает?

Я же просил объяснить полностью =(
PM MAIL   Вверх
w3st
Дата 25.4.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 25.6.2005

Репутация: нет
Всего: нет



У меня все работает, спасибо за пример
PM   Вверх
BeeMaster
Дата 26.4.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



Код

program Project1;

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

var
  tim : TTimer;

procedure FormCreate(Sender: TObject);
begin
  tim := TTimer.Create(nil);
  tim.OnTimer := OnMyTimer;
end;

procedure OnMyTimer(Sender: TObject);
begin
  ShowMessage('Timer arbaiten!!!!');
end;

end.


Вот я отключил форму. А  delphi кричит на OnMyTimer !!!!
PM MAIL   Вверх
generator
Дата 28.4.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.1.2005

Репутация: нет
Всего: нет



Ну молодец! Отключил форму - а кто за тебя теперь сообщения обрабатывать будет?

А ругается на OnMyTimer - потому что она у тебя не описана. То есть у тебя она описана, НО если ты пишешь процедурно - то процедура должна быть описана ДО ее первого использования.

Создать таймер просто. Но нужно еще обработчик события OnTimer его описать. То есть, то что ты делаешь в IDE тыкая мышкой, в твоем случае придется делать руками и я бы не стал так извращаться четко не понимая, что ты пишешь и как оно работает.

Если доводить до ума твой пример, то я бы сделал так:
Код

program Project1;

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

// создаем класс для таймера
type
  TTimerHolder = class
    Timer: TTimer;
    // вот обработчик будующего таймера
    procedure OnMyTimer(Sender: TObject);
    constructor Create;
    destructor Free;
  end;

var
  Timer: TTimerHolder;
  Msg: TMsg;

{ TTimerHolder }

// конструктор класса таймера
constructor TTimerHolder.Create;
begin
  Timer:= TTimer.Create(nil);
  Timer.OnTimer := OnMyTimer;
end;

// соответственно деструктор
destructor TTimerHolder.Free;
begin
  Timer.Free;
end;

// вот обработчик будующего таймера
procedure TTimerHolder.OnMyTimer(Sender: TObject);
begin
  ShowMessage('Timer Event');
end;

begin
  // создаем наш класс с таймером
  Timer := TTimerHolder.Create;
  // ну а вот основная часть кода без него твое приложение не будет работать
  // очередь обработки сообщений
  while GetMessage(Msg, 0, 0, 0) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end.


но это не очень красиво, хотябы потому что останавливать твое приложение придется только через среду Delphi кнопкой "Program Reset"

Можно узнать, для чего тебе именно ракая реализация - без формы?

Это сообщение отредактировал(а) generator - 28.4.2008, 22:35
PM MAIL WWW   Вверх
BeeMaster
Дата 29.4.2008, 11:26 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



 Трояны пишу но там из-за таймера нужно держать форму. А с формой трои много весят =)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0820 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.