![]() |
Progr.-ausführung durch Button1.Click o. Form1.OnCreate
Hallo,
ich möchte, dass eine Prozedur ausgeführt wird. Wird diese Prozedur unter Button1.Click eingebunden und klickt dann zur Ausführung auf diese Schaltfläche, so wird ohne Probleme das jeweilige ausgeführt. Nun möchte ich aber diese Prozedur aufrufen, wenn mein Delphi-Programm gestartet wird. Dies sollte doch mit Form1.OnCreate möglich sein. Aber leider passiert dann nach dem Starten der *.exe nichts mehr. Was mache ich falsch? Die Prozedur, die eingebunden werden soll:
Delphi-Quellcode:
procedure VerbindungBestaetigen;
var hOE: hWnd; begin hOE:=FindWindow(nil,'Trader Workstation'); // Finde das Fenster SetForegroundWindow(hOE); // Bringe es in den Vordergrund SendMessage(hoe,WM_KEYDOWN,VK_RETURN,0); // Drücke die Enter-Taste SendMessage(hoe,WM_KEYUP,VK_RETURN,0); end; |
Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate
Hallo swbo,
leg Deinen Prozedureaufruf ins OnShow. |
Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate
Hallo,
Initialisierungen und die Bereitstellung von Resourcen im event handler für OnCreate der Form sind korrekt. Eingriffe in die Benutzerschnittstelle (hier das Schließen eines fremden Fensters) würde ich an die Programmaktivierung binden - dann ist auch die Nachrichtenschleife deiner Anwendung funktionstüchtig. Du kannst die Komponente TApplicationEvents (Palette Zusätzlich) verwenden und dort das Ereignis OnActivate. Du solltest eine private Form-Variable (Running: Boolean) deklarieren und bei der ersten Aktivierung auf True setzen, damit bestimmte Aktionen nicht mehrfach ausgeführt werden. Grüße vom marabu |
Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate
Hallo marabu,
ich habe den Code wie folgt geändert:
Delphi-Quellcode:
Dabei scheint es zu funktionieren und manchmal, bei mehrmaligem Ausführen und Wiederschließens dann nicht mehr. Habe ich Deinen Wortlaut richtig interpretiert? Die Combobox AusFutChange soll auch ohne auf Button1 zu drücken ausgeführt werden. Wo müßte ich diese zwei Zeilen unterbringen? Vielen Dank!
procedure TTradeManager.ApplicationEvents1Activate(Sender: TObject);
var hOE: hWnd; Running: Boolean; begin Running := false; if Running = false then begin hOE:=FindWindow(nil,'Trader Workstation'); // Finde das Fenster SetForegroundWindow(hOE); // Bringe es in den Vordergrund SendMessage(hoe,WM_KEYDOWN,VK_RETURN,0); // drücke ENTER SendMessage(hoe,WM_KEYUP,VK_RETURN,0); Running := true; end; end; procedure TTradeManager.FormCreate(Sender: TObject); begin iabsocket1.Connected := true; ApplicationEvents1Activate(Sender); end; procedure TTradeManager.Button1Click(Sender: TObject); begin AuswFutChange.ItemIndex; AuswFutChange.OnChange(AuswFutChange.Items); end; |
Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate
Hallo swbo,
du hast die Variable Running als lokale Variable deklariert - so wird sie bei jedem Eintritt in die Prozedur neu erzeugt. Sie gehört in den Abschnitt private deiner Form und wird beim Erzeugen der Form automatisch mit False initialisiert:
Delphi-Quellcode:
Dementsprechend ändert sich deine Ereignisbehandlungsroutine ein wenig:
type
TTradeManager = class(TForm) // ... private Running: Boolean; // ... end;
Delphi-Quellcode:
Den Code für das Ereignis OnActivate() der Application im Ereignis OnCreate() deiner Form aufzurufen ist überflüssig bis schädlich - wir wollten ja gerade weg von diesem zu frühen Zeitpunkt. Das Ereignis OnActivate() wird automatisch ausgelöst und der entsprechende Code wird dann ausgeführt - ohne dein Zutun, also:
procedure TTradeManager.ApplicationEvents1Activate(Sender: TObject);
var hOE: hWnd; begin if not Running then begin // Finde das Fenster hOE := FindWindow(nil, 'Trader Workstation'); // Bringe es in den Vordergrund SetForegroundWindow(hOE); // drücke ENTER SendMessage(hoe,WM_KEYDOWN,VK_RETURN,0); SendMessage(hoe,WM_KEYUP,VK_RETURN,0); // verhindere erneute Ausführung Running := true; end; end;
Delphi-Quellcode:
Was genau du beim Ereignis OnClick() von Button1 vorhast, das entzieht sich leider meiner Kenntnis. Weißt du näheres darüber?
procedure TTradeManager.FormCreate(Sender: TObject);
begin iabsocket1.Connected := true; end; Freundliche Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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