Autor |
Beitrag |
haderlump
Hält's aus hier
Beiträge: 4
|
Verfasst: So 09.05.10 07:45
Hallo zusammen
Ich muß bei einem Programm eine Zeichenroutine aufrufen, wenn es aktiviert wird. Dazu will ich in das Ereignis Appliation.OnActivate meine Routine eintragen. Wie muß ich das machen?
Die Zeichenroutine existiert bereits in der Hauptform.
Wenn aber von einer Windows_Anwendung auf mein Programm gewechselt wird, ist mein Hauptfenster (der Bildanteil davon) leer. Ich muß dann das Zeichnen durch eine manuelle Eingabe auslösen.
Dei eigene Routine heißt einfach "zeichnen"
Danke im Voraus
Fritz
Hier der Code der Application.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| program bahn;
uses Forms, hauptformular in 'hauptformular.pas' , Statusanz in 'Statusanz.pas' , fahrregler1 in 'fahrregler1.pas' , fahrregler2 in 'fahrregler2.pas' , zugnummerneingabe in 'zugnummerneingabe.pas' , zugnummernauswahl in 'zugnummernauswahl.pas' , fahrregler3 in 'fahrregler3.pas' , Unitfahrregler4 in 'Unitfahrregler4.pas' , fahrregler5 in 'fahrregler5.pas' , schattenbahnhofst in 'schattenbahnhofst.pas' , SerialNG2PortDemoMain in 'SerialNG2PortDemoMain.pas' , SerialNGBasic in 'SerialNGBasic.pas' ;
{$R *.RES}
begin Application.Initialize; Application.Title := 'Modellbahnsteuerung'; Application.CreateForm(THauptform, Hauptform); Application.CreateForm(TStatusanzeige, Statusanzeige); Application.CreateForm(TRegler1, Regler1); Application.CreateForm(TRegler2, Regler2); Application.CreateForm(TZugnummerneing, Zugnummerneing); Application.CreateForm(TZugnummernausw, Zugnummernausw); Application.CreateForm(TRegler3, Regler3); Application.CreateForm(TRegler4, Regler4); Application.CreateForm(TRegler5, Regler5); Application.CreateForm(TSchattenbahnhofsteuerung, Schattenbahnhofsteuerung); Application.CreateForm(TForm1, Form1); Application.CreateForm(TSerialNGBasicDLG, SerialNGBasicDLG); Application.Run; end. |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 09.05.10 08:42
Hallo und  im Forum!
Wie wäre es, wenn du einfach auf OnPaint deiner vermutlich vorhandenen TPaintBox reagierst? (Oder eben das OnPaint der Komponente, auf der du zeichnest.)
Denn wenn du nur in OnActivate zeichnest, bringt das nichts. Wenn dann das Fenster verdeckt war, wird der Inhalt erst wieder neu gezeichnet, wenn dein Fenster wieder den Fokus erhält. Und das möchtest du vermutlich nicht, oder?
OnPaint wird immer dann aufgerufen, wenn der Inhalt neu gezeichnet werden muss.
Eine Demo dazu inkl. selbst gezeichneter Controls usw. findest du hier:
www.delphi-forum.de/viewtopic.php?p=557541
Dieses Periodensystem besteht nur aus der Leiste oben und einer TPaintBox. 
|
|
haderlump 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 09.05.10 09:29
Danke für die schnelle Antwort, aber das ist es leider nicht.
Laut Delphi Hilfe ist das Ereignis "application.OnActivate" zuständig. Das was du beschrieben hast, funktioniert ja schon. Also Wenn ich z.B ein Unterformulare schließe, wird das Bild neu gezeichnet. Nur wenn ich von einer anderen Windows_App. zu meiner Anwendung wechsle, also wenn ich z.B. einen Editor schließe, so dass mein Fenster wieder sichtbar wird passiert nix. Die vorher überdeckte Fläche bleibt dann grau.
Ich möchte eigentlich nur wissen, wie man sich in das Application.OnActivate Ereignis einklinkt, Wo muß ich meinen Code hinschreiben.
Eigentlich ist das für mich ein grundsätzliches Problem mich in derartige Ereignisse einzuklinken. (leider bin ich noch kein Programmierprofi, eher leicht fortgeschritten )
Gruß Fritz
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: So 09.05.10 10:01
Vielleicht musst Du einfach auch bei WM_ERASEBKGND zeichnen?
Ansonsten verrät die Hilfe das TApplication.OnActivate ein TNotifyEvent ist, also eine
Delphi-Quelltext 1:
| procedure (Sender: TObject) of object; |
Erstelle also z.b. eine Methode
Delphi-Quelltext 1:
| procedure THauptForm.OnApplicationActivate(Sender: TObject); |
welche diesem Schema entspricht und weise diese dem OnActivate-Event zu.
Grüsse, Dirk
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 09.05.10 10:14
|
|
|