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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие форм по таймеру 
:(
    Опции темы
Доминик
Дата 27.7.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
  private

  public
   procedure click(Sender:TObject);
   function ex(name:string):TNotifyEvent;
  end;

var
  Form1: TForm1;
  fm:array [0..99] of tform;
  tim:array [0..99] of ttimer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
begin
 for i := 0 to 5 do
    begin

 fm[i] := TForm.Create(form1);

 with fm[i] do

  fm[i].BorderWidth:=10;
  fm[i].Left:=528;
  fm[i].Width:=286;
  fm[i].Top:=screen.Height-height+370;
  fm[i].Left:=screen.width-width+590;
  fm[i].Caption:=intToStr(i);
  fm[i].BorderStyle:=bssingle;
  fm[i].Visible:=true;
  fm[i].OnClick:=click;
  tim[i]:=ttimer.Create(fm[i]);
 with tim[i] do
 begin
  Enabled:=false;
  Interval:=10000;
  OnTimer:=ex(fm[i].Caption);
  Tim[i].Enabled:=true;
 end;
    end;
end;



procedure TForm1.click(Sender: TObject);
begin
Tform(sender).Close;
end;

function TForm1.ex(name: string): TNotifyEvent;
begin
 PostMessage(FindWindow(0,pchar(name)), WM_CLOSE, 0, 0);
end;
end.



Как сделать чтоб динамически созданые окна закрывались по таймеру? Подскажите кто знает.
PM MAIL   Вверх
Nofate
Дата 27.7.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно создать для своих динамических форм отдельный класс. Кинуть на нее таймер и закрывать по таймеру. А в родительской форме  плодить не охапки TFrom и TTimer, а свои окошки. 


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Christoph
Дата 27.7.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

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



я бы сделал как то так


Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure OnTimer(Sender:TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CompList:TComponentList;
  NewForm:TForm;
  TimerClose:TTimer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  NewForm:=TForm.Create(Application);
  NewForm.Show;
  TimerClose:=TTimer.Create(NewForm);
  TimerClose.Interval:=10000;
  TimerClose.Enabled:=True;
  TimerClose.OnTimer:=OnTimer;
  CompList.Add(NewForm);
end;

procedure TForm1.OnTimer(Sender:TObject);
begin
  (CompList.Last as TForm).Close;
  COmpList.Last.Free;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  CompList:=TComponentList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CompList.Free;
end;

end.





--------------------
user posted image
PM MAIL ICQ   Вверх
Доминик
Дата 28.7.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Christoph
Спасибо помог.)
PM MAIL   Вверх
Доминик
Дата 30.7.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А еще наведешь на мысль с подобным примером для компонента Tlabel, кторый размещен на этой же форме т.е

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure OnTimer(Sender:TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CompList:TComponentList;
  NewForm:TForm;
  TimerClose:TTimer;
  newlabel:tlabel;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  NewForm:=TForm.Create(Application);
  NewForm.Show;
  TimerClose:=TTimer.Create(NewForm);
  TimerClose.Interval:=10000;
  TimerClose.Enabled:=True;
  TimerClose.OnTimer:=OnTimer;
  newlabel:=Tlabel.create(newform);
  newlabel.caption:='Test';
  newlabel.parent:=newform;
  newlabel.onclick:=OnTimer;
  CompList.Add(NewForm);
end;

procedure TForm1.OnTimer(Sender:TObject);
begin
  (CompList.Last as TForm).Close;
  COmpList.Last.Free;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  CompList:=TComponentList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CompList.Free;
end;

end.


при клике по newlabel ошибка выходит. 



M
THandle
Модератор: используйте подсветку кода!

PM MAIL   Вверх
Christoph
Дата 31.7.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

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



Цитата
TimerClose.OnTimer:=OnTimer;

удали эту строчку,если ошибка останется я утром поробую разобраться


--------------------
user posted image
PM MAIL ICQ   Вверх
Доминик
Дата 31.7.2009, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



TimerClose.OnTimer:=OnTimer; убрал, не помогло.
Ошибка есть когда создано более одной формы.. если создать одну то при клике на лабел окно закрывается.



PM MAIL   Вверх
atomAltera
Дата 1.8.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Форма полностью создаётся в runTime? Или уже есть заготовка? 
В первом случае делается так: 
Код


type
 tMainForm = calss(tForm)
  ...
  procedure onTime(sender: tObject);
  ...
end;

procedure tMainForm.showTimerForm;
var
t: tTime;
f: tMyForm;
begin
  f := tMyForm.create(application);
  t := tTimer.create(f);
  t.tag := f.handle;
  t.interval := 1000;
  t.onTimer := onTime; 
  f.show;
end;

procedure tMainForm.onTime(sender: tObject);
begin
   sendMessage(tHandle(tTime(sender).tag), wm_close, 0, 0);
end;


Вот вроде и всё...  smile 



PM MAIL ICQ Skype GTalk   Вверх
Christoph
Дата 1.8.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

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



а для закрытия формы по Tlabel  можешь сделать отдельный метод.

Код

...
private
    procedure OnTimer(Sender:TObject);
    procedure OnClick(Sender:TObject);


Код

newlabel:=Tlabel.create(newform);
newlabel.caption:='Test';
newlabel.parent:=newform;
newlabel.onclick:=OnClick;



Код

procedure TForm1.OnClick(Sender:TObject);
begin
  if (Sender is TLabel) then ((Sender as TLabel).parent as TForm).Close;
end;



--------------------
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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