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:
type
TTradeManager = class(TForm)
// ...
private
Running: Boolean;
// ...
end;
Dementsprechend ändert sich deine Ereignisbehandlungsroutine ein wenig:
Delphi-Quellcode:
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;
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:
Delphi-Quellcode:
procedure TTradeManager.FormCreate(Sender: TObject);
begin
iabsocket1.Connected := true;
end;
Was genau du beim Ereignis OnClick() von Button1 vorhast, das entzieht sich leider meiner Kenntnis. Weißt du näheres darüber?
Freundliche Grüße vom marabu