Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Procedure ausführen nachdem das Fenster angezeigt wird (https://www.delphipraxis.net/198471-procedure-ausfuehren-nachdem-das-fenster-angezeigt-wird.html)

NoName1 5. Nov 2018 18:03

Procedure ausführen nachdem das Fenster angezeigt wird
 
Guten Tag,
ich möchte eine procedure ausführen lassen, nachdem die Form angezeigt wurde.
Die procedure überprüft ein Wert auf vorhandensein. Ist der Wert nicht vorhanden, dann
soll der User einen Wert eingeben. Dazu wäre es gut, wenn das Formular schon im vollen Umfang angezeigt wurde.
Ausprobiert habe ich das Ereignis OnActivate, dies war aber nicht das richtige Ereignis.
Im OnShow-Ereignis funktionierte dies auch nicht.
Es müsste so etwas, wie nach dem Anzeigen der Form "OnShowAfter", geben.
Wie würdet Ihr dies lösen? Oder übersehe ich mal wieder ein Ereignis?
Vielen Dank für Eure Hilfe.

DieDolly 5. Nov 2018 18:10

AW: Procedure ausführen nachdem das Fenster angezeigt wird
 
Guck mal da. Mit Messages.
https://www.delphipraxis.net/195775-...angezeigt.html

hoika 5. Nov 2018 19:00

AW: Procedure ausführen nachdem das Fenster angezeigt wird
 
Hallo,
Zitat:

Ausprobiert habe ich das Ereignis OnActivate, dies war aber nicht das richtige Ereignis.
Das müsste aber das richtige Ereignis sein.
Zeig doch mal Deinen Code.

NoName1 6. Nov 2018 15:17

AW: Procedure ausführen nachdem das Fenster angezeigt wird
 
Zitat:

Zitat von hoika (Beitrag 1417479)
Hallo,
Zitat:

Ausprobiert habe ich das Ereignis OnActivate, dies war aber nicht das richtige Ereignis.
Das müsste aber das richtige Ereignis sein.
Zeig doch mal Deinen Code.

Alles klar. Es stand noch etwas im Code, das wirklich nur ausgeführt werden kann, wenn das Formular
sichtbar ist.
Den Code dazu:
Delphi-Quellcode:
procedure TfrmLogeBuchungen.FormActivate(Sender: TObject);
var
  pJahr: Word;
  pMonat: Word;
  pTag: Word;
  pNode: PVirtualNode;
  pDaten: TOBuJahrVSTDaten;
begin
  // Anfangsbestand erfassen nicht vergessen
  DecodeDate(Date, pJahr, pMonat, pTag);
  BuJahr := pJahr;
  LeseBuJahreEin; // Buchungsjahr in VirtualStringTree
  if vstBuchungsJahr.RootNodeCount = 0 then begin
    smdlg1.Caption := 'Ein Buchungsjahr erfassen ...';
    smdlg1.Buttons.Clear;
    smdlg1.Buttons.Add.Caption := 'Ja, erfassen';
    smdlg1.Buttons.Add.Caption := 'Nein, nicht erfassen';
    smdlg1.Buttons[0].ButtonResult := mrOk;
    smdlg1.Buttons[1].ButtonResult := mrCancel;
    if smdlg1.ExecuteDialog = mrOk then begin
      NeuesBuchungsJahr;
    end;
  end;
// Den else-Zweig in eine neue Procedur packen und im OnShowereignis ausführen lassen, dann klappt es
  {else begin
    vstBuchungsJahr.SetFocus;
    pNode := vstBuchungsJahr.GetFirst;
    vstBuchungsJahr.FocusedNode := pNode;
    vstBuchungsJahr.Selected[pNode] := True;
    pNode := vstBuchungsJahr.FocusedNode;
    pDaten := TOBuJahrVSTDaten(vstBuchungsJahr.GetNodeData(pNode)^);
    BuJahr := pDaten.FBuJahr;
    BuKontenPlanID := pDaten.FKontenPlanID;
    if pDaten.FAbschluss = 'J' then
      BuAbschluss := True;

      // Weitere Tabellen öffnen ------------
    BuchungenOeffnen;
  end;}
end;

hoika 6. Nov 2018 19:09

AW: Procedure ausführen nachdem das Fenster angezeigt wird
 
Hallo,
und wo ist jetzt Dein Problem?
Wird der VST nicht komplett angezeigt?

Ich nehme mal an, dass smdlg1 Dein Dialog ist,
der angezeigt werden soll?

NoName1 7. Nov 2018 16:04

AW: Procedure ausführen nachdem das Fenster angezeigt wird
 
Zitat:

Zitat von hoika (Beitrag 1417539)
Hallo,
und wo ist jetzt Dein Problem?
Wird der VST nicht komplett angezeigt?

Ich nehme mal an, dass smdlg1 Dein Dialog ist,
der angezeigt werden soll?

Na ja, das Problem war, dass der Focus nicht auf das VST gestellt werden und somit auch nicht der erste
Datensatz ausgelesen werden konnte. An dieser Stelle kam es auch zum Programmabbruch.
Aber wie erwähnt, ich habe den Code der im Elsezweig steht in eine neue Procedure gepackt und greife auf die Procedure
im OnShow-Ereignis zu. Das wird nun auch fehlerfrei ausgeführt.
Danke für Deine Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 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