AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wert an OnTimer Event übergeben

Offene Frage von "Real_Thunder"
Ein Thema von Real_Thunder · begonnen am 15. Mai 2007 · letzter Beitrag vom 15. Mai 2007
Antwort Antwort
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#1

Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 00:30
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
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 05:30
Hi!

Der Grund ist folgende Definition in der Unit ExtCtrls:
property OnTimer: TNotifyEvent read FOnTimer write SetOnTimer; Damit ist das OnTimer-Event als TNotifyEvent festgelegt und eben jenes ist so definiert:
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#3

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 07:53
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 08:34
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
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 08:37
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
TTimer(Sender).Tag darauf zugreifen
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 09:33
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#7

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 10:25
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.
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#8

Re: Wert an OnTimer Event übergeben

  Alt 15. Mai 2007, 11:17
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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