Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wert an OnTimer Event übergeben (https://www.delphipraxis.net/92140-wert-ontimer-event-uebergeben.html)

Real_Thunder 15. Mai 2007 00:30


Wert an OnTimer Event übergeben
 
ich erstelle zur laufzeit einen Timer, und der bekommt dann auch einen OnTimerEvent zugewiesen


aller wunderbar... allerdings möchste ich das man dem event noch nen zusätzlichen wert übergibt...

damit das even unterschieldich reagiert...

doch sobald ich an der procedure declaration etwas ändere bekomme ich ne fehlermelung,
ebenso wenn ich beim sender einen manuell eintrage..
irgendiwe habe ich das mit dem notify event noch nicht ganz geschnallt

wieso geth es nicht das ich da einen weinfachen wert mit übergeben kann ?

MfG Real Thunder

chaosben 15. Mai 2007 05:30

Re: Wert an OnTimer Event übergeben
 
Hi!

Der Grund ist folgende Definition in der Unit ExtCtrls:
Delphi-Quellcode:
property OnTimer: TNotifyEvent read FOnTimer write SetOnTimer;
Damit ist das OnTimer-Event als TNotifyEvent festgelegt und eben jenes ist so definiert:
Delphi-Quellcode:
TNotifyEvent = procedure(Sender : TObject) of object;
Daran "kannst" du nichts ändern.

Aber es stellt sich bezüglich deines Problems folgende Frage:
Wie willst du denn dem OnTimerEvent Daten mitgeben, wenn du es in der Regel doch nicht selbst aufrufst?
Ich glaube du musst eher deiner Instanz eine Variable mitgeben, die das regelt was du willst.

Real_Thunder 15. Mai 2007 07:53

Re: Wert an OnTimer Event übergeben
 
Der grund für das ganze ist fdas ich ein array of timer habe... die halt dann erstellt werden.
und jeder timer soll daten eines anderem, ebenfalls frisch erstelltem formular verändern.
Und nach ablauf des timers wieder freigeben.

marabu 15. Mai 2007 08:34

Re: Wert an OnTimer Event übergeben
 
Hallo,

versuche doch mal zu beschreiben was du wirklich vorhast. Bisher beschreibst du nur deinen Lösungsansatz. Es sieht aber so aus, als ob gerade dein Ansatz dir die Schwierigkeiten beschert.

Freundliche Grüße

Gruber_Hans_12345 15. Mai 2007 08:37

Re: Wert an OnTimer Event übergeben
 
du kannst im Ontimer Event mit dem Parameter Sender auf den Timer zugreifen, der das Event ausgelöst hat.

Wenn du zb im Timer im Tag einen Wert abspeicherst (oder auch ein Objekt zb ein Form) kannst du dann mit
Delphi-Quellcode:
TTimer(Sender).Tag darauf zugreifen

chaosben 15. Mai 2007 09:33

Re: Wert an OnTimer Event übergeben
 
Ich rate mal:

Du hast ein Array of TTimer und alle diese Timer haben eine OnTimer-Prozedur. In dieser Prozedur willst du auf MeineForms : array of TForm (nur geraten ;) ) zugreifen, weißt haber nicht welcher Timer dieses Event gerade abgefeuert hat.

Wenn dem so ist, ist hier mein Vorschlag wie man das sauber löst:
Delphi-Quellcode:
type
  TMyFormTimer = class(TTimer)
  private
    FForm : TForm;
  public
    constructor Create(AOwner: TComponent; AForm : TForm);

    property Form : TForm read FForm;
  end;

//...

constructor TMyFormTimer.Create(AOwner: TComponent; AForm : TForm);
begin
  inherited Create(AOwner);

  FForm:=AForm;
end;

//deine bisherige OnTimer-Prozedur
procedure OnTimer(Sender : TObject);
begin
  if Sender is TMyFormTimer then
    TMyFormTimer(Sender).Form.MachWasMitDemForm;
end;
Natürlich muss du jetzt ein Array of TMyFormTimer nutzen und auch TMyFormTimer-Objekte erzeugen.

Real_Thunder 15. Mai 2007 10:25

Re: Wert an OnTimer Event übergeben
 
Ich habe versucht alles auf einen Ontimer zu setzten, und der ontimer procedure nur die jeweilige form mitzuteilen die verändert werden soll.

Ich schaue mir nun mal deinen code etwas genauer an.. bis jetzt kann ich damit nicht viel anfangen... warschienlich aus reiner unwissenheit :)

Nachtrag:
Der Timer und das Formualr werden in der selben Formklasse erzeugt.
hier mal der code:

Delphi-Quellcode:

Procedure TMain.GetConfig;
begin
  SetLength(PopUpInfos,1);

  PopUpInfos[0].timer:= TTimer.Create(nil);

  PopUpInfos[0].Form:=TPopInfoForm.Create(nil);

  PopUpInfos[0].Timer.interval:=20;
  PopUpInfos[0].Timer.ontimer:=PopupInfoTimer;
  TPopInfoForm(PopUpInfos[0].Form).Show;
  PopUpInfos[0].Timer.enabled:=true;

End;


Procedure TMain.PopupInfoTimer(Sender:TObject);
var
  count:integer;
begin
with TPopInfoForm(PopUpInfos[0].Form) do begin
  PopUpInfos[0].Count:=PopUpInfos[0].Count+1;
  TiCount.Caption:=IntToStr(PopUpInfos[0].count);
  if PopUpInfos[0].Count < 27 then begin
    alphablendvalue:= alphablendvalue+ 9;
    Top:=Top-3;
    Height:=Height+3;
  end else if PopUpInfos[0].Count =28 then begin
    PopUpInfos[0].Timer.interval:=2000;
    alphablendvalue:=255;
  end else if PopUpInfos[0].Count < 56 then begin
    PopUpInfos[0].Timer.interval:=20;
    Top:=Top+3;
    Height:=Height-3;
    alphablendvalue:= alphablendvalue-9;
  end else if PopUpInfos[0].count = 56 then begin
    PopUpInfos[0].Timer.enabled:=False;
    AlphaBlendValue:=0;
    PopUpInfos[0].Count:=0;
    TPopInfoForm(PopUpInfos[0].Form).free;
    PopUpInfos[0].Timer.enabled:=false;
    PopUpInfos[0].Timer.free;
  end;
end;
Hierbei soll der Index i moment 0 durch ne variable ersetzt werden.

Real_Thunder 15. Mai 2007 11:17

Re: Wert an OnTimer Event übergeben
 
Ok habe es nun geschftt....
Habe einfach den timer auf die erstellte form gesetzt.. und dort den timer ablaufen lassen
nach einer bestimmten zeit ruft die erstellte form dann eine procedure der hauptform auf, übergibt der procedure self als form
und die hauptform gibt dann wieder die erstellte form frei.

Vielen dank für di hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz