AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Progr.-ausführung durch Button1.Click o. Form1.OnCreate
Thema durchsuchen
Ansicht
Themen-Optionen

Progr.-ausführung durch Button1.Click o. Form1.OnCreate

Ein Thema von swbo · begonnen am 24. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
swbo

Registriert seit: 19. Dez 2005
Ort: Meerane
8 Beiträge
 
#1

Progr.-ausführung durch Button1.Click o. Form1.OnCreate

  Alt 24. Feb 2006, 10:40
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;
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#2

Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate

  Alt 24. Feb 2006, 10:42
Hallo swbo,

leg Deinen Prozedureaufruf ins OnShow.
  Mit Zitat antworten Zitat
marabu

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

Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate

  Alt 24. Feb 2006, 10:56
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
  Mit Zitat antworten Zitat
swbo

Registriert seit: 19. Dez 2005
Ort: Meerane
8 Beiträge
 
#4

Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate

  Alt 25. Feb 2006, 14:03
Hallo marabu,

ich habe den Code wie folgt geändert:

Delphi-Quellcode:
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;
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!
  Mit Zitat antworten Zitat
marabu

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

Re: Progr.-ausführung durch Button1.Click o. Form1.OnCreate

  Alt 25. Feb 2006, 15:38
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
  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 23:06 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