![]() |
Knopfdruck Formübergreifend behandeln
hallo!
ich bin gerade dabei ein tutorial zu programmieren welches in einer eigenen form angezeigt wird. In einem gewissen Schritt fordere ich den Benutzer auf per Knopfdruck (auf dem hauptformular) einen neuen Mitarbeiter anzulegen. Das problem ist, ich krieg es auf der Tutorialform nicht mit wenn dieser button gedrückt wurde, um den nächsten schritt im tutorial einzuleiten...die mainform heisst 'form2' die andere 'tutorial'. ich hab von von
Delphi-Quellcode:
über
if Sender is form2.neuermitarbeiter then
tut3.show
Delphi-Quellcode:
if form2.neuermitarbeiter.click=true then
sowie
Delphi-Quellcode:
if (Sender is form2.neuermitarbeiter) then
ein bischen was ausprobiert, ich kriegs irgendwie nicht hin :S ich mache das in einer timer routine alle 500ms..wie prüfe ich ob der user auf form2 einen bestimmten button gedrückt hat??! :( :? danke für die hilfe... |
AW: Knopfdruck Formübergreifend behandeln
Das geht leider nicht, denn es wird nirgendwo vermerkt, dass ein Button gedrückt wurde.
In dem Moment des Drückens wird eine Nachricht verschickt auf die der Button dann reagiert und das Ereignis
Delphi-Quellcode:
auslöst.
OnClick
Du kannst jetzt versuchen auf diese Nachricht zu lauschen oder dein Tutorial im OnClick des Buttons zu informieren oder selber in der Form einen Status merken oder ... |
AW: Knopfdruck Formübergreifend behandeln
Hier würden dir
![]() Entweder abonnierst du auch in Form2 das OnClick Event des Buttons in Form1 oder du definierst dir ein eigenes Event, das ausgelöst wird, sobald du den Button klickst. Quellcode Form1:
Delphi-Quellcode:
private
FOnButtonClick: TNotifyEvent public property OnButtonClick: TNotifyEvent read FOnButtonClick write FOnButtonClick; ... procedure Form1.ButtonClick(Sender: TObject); begin if Assigned(FOnButtonClick) then FOnButtonClick(Sender); end; Quellcode Form2:
Delphi-Quellcode:
Der Quellcode ist nur so runtergeschrieben und nicht getestet. Es ist möglich, dass Fehler drin sind. Schau dir aber bitte trotzdem das Tutorial auf Delphi-Treff an, damit du verstehst, was genau hier passiert. Mein Beispiel soll nur als Grundlage bzw. als Anfang dienen.
procedure Form2.Form2Show(Sender: TObject);
begin Form1.OnButtonClick := ClickEventHandler; end; procedure Form2.ClickEventHandler(Sender: TObject); begin // Nächster Tutorial Schritt einleiten end; |
AW: Knopfdruck Formübergreifend behandeln
Das mit den Events ist schon eine gute Richtung. Eine Möglichkeit über alle Formen zu agieren wäre z. B. es mit Messages zu machen. Hier ein kleines Beispiel:
Delphi-Quellcode:
Nun der Aufruf aus der Form2
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WM_FORM2_BTN1_MSG = WM_USER + 1; //<<<<<<<<< type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure WMForm2Btn1(var Msg : TMessage); message WM_FORM2_BTN1_MSG; //<<<<<<<<< ... implementation uses Unit2; {$R *.dfm} procedure TForm1.WMForm2Btn1(var Msg : TMessage); //<<<<<<<<< begin ShowMessage('Hallo, hier ist Form2'); end;
Delphi-Quellcode:
Du kannst bei einem Event eine Message mit abschicken. Unter normalen Umständen kann sie ignoriert werden, wenn du aber im Tutorial-Modus bist, kannst du sie auswerten.
unit Unit2;
... implementation {$R *.dfm} uses Unit1; procedure TForm2.Button1Click(Sender: TObject); begin SendMessage(Form1.Handle, WM_FORM2_BTN1_MSG, 0, 0); //<<<<<<<<< end; |
AW: Knopfdruck Formübergreifend behandeln
Auf diese Art und Weise hast Du aber zirkuläre Referenzen zwischen erster und zweiter Unit. Da wäre es doch besser, z.B. im versendenden Formular eine Liste von Fensterhandles vorzuhalten (in Form einer Property), in die sich die interessierten Formulare eintragen können. Diese Liste arbeitet das Formular dann einfach ab. Somit müssen zwar die Units der interessierten Formulare jeweils Unit2 einbinden, aber nicht anders herum.
|
AW: Knopfdruck Formübergreifend behandeln
Nun ich persönlich habe dafür einen Messenger wo sich jeder für eine spezielle Message eintragen/austragen kann. Allen Beteiligten ist nur der Messenger bekannt und dadurch gibt es keine Abhängigkeiten ausser mit dem Messenger.
|
AW: Knopfdruck Formübergreifend behandeln
Zitat:
|
AW: Knopfdruck Formübergreifend behandeln
Heute hat jemand geschrieben, dass wenn man schon eine Antwort liefert, diese korrekt sein sollte. :roll:
|
AW: Knopfdruck Formübergreifend behandeln
Eine Antwort, von korrekt war nicht die Rede.
|
AW: Knopfdruck Formübergreifend behandeln
dankeschön habs hinbekommen :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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 by Thomas Breitkreuz