Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Knopfdruck Formübergreifend behandeln (https://www.delphipraxis.net/180237-knopfdruck-formuebergreifend-behandeln.html)

rhodan 4. Mai 2014 07:42

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:
if Sender is form2.neuermitarbeiter then
tut3.show
über

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...

Sir Rufo 4. Mai 2014 09:02

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:
OnClick
auslöst.

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 ...

Aviator 4. Mai 2014 09:08

AW: Knopfdruck Formübergreifend behandeln
 
Hier würden dir Events weiterhelfen.
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:
procedure Form2.Form2Show(Sender: TObject);
begin
  Form1.OnButtonClick := ClickEventHandler;
end;

procedure Form2.ClickEventHandler(Sender: TObject);
begin
  // Nächster Tutorial Schritt einleiten
end;
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.

Popov 4. Mai 2014 12:19

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:
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;
Nun der Aufruf aus der Form2
Delphi-Quellcode:
unit Unit2;

...

implementation

{$R *.dfm}

uses
  Unit1;

procedure TForm2.Button1Click(Sender: TObject);
begin
  SendMessage(Form1.Handle, WM_FORM2_BTN1_MSG, 0, 0); //<<<<<<<<<
end;
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.

DeddyH 4. Mai 2014 12:28

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.

Sir Rufo 4. Mai 2014 12:33

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.

Popov 4. Mai 2014 12:51

AW: Knopfdruck Formübergreifend behandeln
 
Zitat:

Zitat von DeddyH (Beitrag 1257866)
Auf diese Art und Weise hast Du aber zirkuläre Referenzen zwischen erster und zweiter Unit.

Das es besser geht, stimme ich dir zu. Es ist auch nicht die Lösung. Vielmehr soll dieses Beispiel vorerst nur die Idee nennen wie es gehen könnte.

mkinzler 4. Mai 2014 12:57

AW: Knopfdruck Formübergreifend behandeln
 
Heute hat jemand geschrieben, dass wenn man schon eine Antwort liefert, diese korrekt sein sollte. :roll:

Popov 4. Mai 2014 13:10

AW: Knopfdruck Formübergreifend behandeln
 
Eine Antwort, von korrekt war nicht die Rede.

rhodan 4. Mai 2014 17:52

AW: Knopfdruck Formübergreifend behandeln
 
dankeschön habs hinbekommen :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Seite 1 von 2  1 2      

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