![]() |
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 |
Re: Wert an OnTimer Event übergeben
Hi!
Der Grund ist folgende Definition in der Unit ExtCtrls:
Delphi-Quellcode:
Damit ist das OnTimer-Event als TNotifyEvent festgelegt und eben jenes ist so definiert:
property OnTimer: TNotifyEvent read FOnTimer write SetOnTimer;
Delphi-Quellcode:
Daran "kannst" du nichts ändern.
TNotifyEvent = procedure(Sender : TObject) of object;
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. |
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. |
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 |
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
|
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:
Natürlich muss du jetzt ein Array of TMyFormTimer nutzen und auch TMyFormTimer-Objekte erzeugen.
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; |
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:
Hierbei soll der Index i moment 0 durch ne variable ersetzt werden.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; |
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 04:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz