Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen (https://www.delphipraxis.net/215041-zur-laufzeit-erzeugten-button-das-onclick-ereignis-ausfuehren.html)

NoName1 27. Apr 2024 08:23

Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Guten Tag,
Mit dem untenstehenden Code wird ein Panel mit einem Eingabefeld für die Erfassung eines Passwortes erstellt.
Die Anzeige des Passwortes soll durch einen Klick auf den Button sichtbar sein.
Wie kann dem Button pBPW die Procedure …ZeigePasswort zugewiesen werden?
Hat jemand einen Codeschnipsel aus dem dies ersichtbar ist?

Code:
var
  pPanel: TAdvPanel;
  pTop: Integer;
  pEdtPW: TAdvEdit;
  pBPW: TAdvGlowButton;
begin
  Result := '';
  pTop := 16;
  pPanel := TAdvPanel.Create(Self);
  try
    pPanel.Width := 393;
    pPanel.Height := 56;
    pPanel.Color := TAppConstants.GetAppliFarbe;
    pPanel.BorderStyle := VCL.Forms.bsSingle;
   
   // EditField ----
    pEdtPW := TAdvEdit.Create(pPanel);
    pEdtPW.Top := pTop;
    pEdtPW.Width := 256;
    pEdtPW.Left := 80;
    pEdtPW.Font.Size := 12;
    pEdtPW.Font.Style := [fsBold];
    pEdtPW.EditType := etPassword;
    pEdtPW.LabelCaption := 'Passwort';
    pEdtPW.LabelTransparent := True;
    pEdtPW.LabelPosition := lpLeftCenter;
    pEdtPW.LabelFont.Size := 10;
    pEdtPW.LabelFont.Style := [fsBold];
    pEdtPW.Parent := pPanel;

    // Button ---
    pBPW := TAdvGlowButton.Create(pPanel);
    pBPW.Top := 16;
    pBPW.Height := pEdtPW.Height;
    pBPW.Width := pEdtPW.Height;
    pBPW.Left := pEdtPW.Left + pEdtPW.Width + 1;
    pBPW.Caption := '...';
    pBPW.Parent := pPanel;
    pBPW.Tag := 1;
    pBPW.OnClick // wie geht es hier weiter??
   
--------------------------------------------------------   
procedure TfrmFNCSchriftverkehr.ZeigePasswort(aEdit: TAdvEdit);
begin
    if aEdit.EditType = etPassword then
      aEdit.EditType := etString
    else
      aEdit.EditType := etPassword;
end;
Vielen Dank für Eure Hilfen im Voraus.

himitsu 27. Apr 2024 09:06

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Delphi-Quellcode:
pBPW.OnClick := NameDeinerMethodeOderKlassenMethode;
, welche zu z.B. in TfrmFNCSchriftverkehr deklariert hast.
Delphi-Quellcode:
type
  TfrmFNCSchriftverkehr = class(TForm)
  ...
  private
    procedure MeinClickEreigniss(Sender: TObject);
  end;
Und per Code Ausführen
Delphi-Quellcode:
pBPW.Click;

DeddyH 27. Apr 2024 09:10

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Spendiere Deinem Formular eine Methode mit der Signatur des OnClick-Events des Buttons. Diese kannst Du dann zuweisen. Ich vermute mal, dass das ein normaler TNotifyEvent ist, also könnte das so aussehen:
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
  …
    procedure DoShowPassword(Sender: TObject);
  …
  end;



procedure TDeinForm.DoShowPassword(Sender: TObject);
begin
  // Code
end;


 
  DeinButton.OnClick := DoShowPassword;

EdAdvokat 27. Apr 2024 09:33

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Delphi-Quellcode:
procedure TForm1.btnKeylockClick(Sender: TObject);
begin
  if (edtKey.PasswordChar='*') then
  begin
   (edtKey.PasswordChar:=#0)end else
    edtKey.PasswordChar:='*';
end;
sicher nicht die hochprofessionellste Lösung

mmw 27. Apr 2024 09:34

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Hallo,

noch eine Möglichkeit.

Delphi-Quellcode:
type
  TmypBPW = class
    private
    procedure OnClick(Sender: TObject);
  end;

var
   mypBPW:TmypBPW;

procedure TmypBPW.OnClick(Sender: TObject);

begin
 if advEdit1.EditType = etPassword then
      advEdit1.EditType := etString
    else
      advEdit1.EditType := etPassword;
end;


var
  pPanel: TAdvPanel;
  pTop: Integer;
  pEdtPW: TAdvEdit;
  pBPW: TAdvGlowButton;
 
begin
 .....
 .....
 pBPW.OnClick:=mypBPW.OnClick;                 // wie geht es hier weiter??

Gruß

himitsu 27. Apr 2024 09:54

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Was soll das doppelte := darstellen?

NEIN, jedenfalls nicht, wenn es in mypBPW keine Instanz gibt (abgesehn von der den beiden blöden globalen Variablen),
aber für gibt es ja was von Ratiopharm vom Hersteller.

Delphi-Quellcode:
type
  TmypBPW = class
  private
    class procedure DoClick(Sender: TObject);
  end;

pBPW.OnClick := TmypBPW.DoClick;
Und OnClick würde ich solche Prozeduren sowieso nicht.
Bezeichner für Event-Handler vs. Bezeichner für Event-Methoden.

Da hier Button und Edit in der Form liegen, gehört das Event dafür auch in diese Klasse rein.
Wenn aber dennoch in einer anderen Klasse, dann werden NIEMALS die globalen Variablen verwendet, sondern diese Instanz bekommt Zeiger auf diese Komponenten übergeben und/oder Ereignisse für den Rückruf.

mmw 27. Apr 2024 10:00

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Zitat:

Zitat von himitsu (Beitrag 1536171)
Was soll das doppelte := darstellen?

NEIN, jedenfalls nicht, wenn es in mypBPW keine Instanz gibt (abgesehn von der den beiden blöden globalen Variablen),
aber für gibt es ja was von Ratiopharm vom Hersteller.

Delphi-Quellcode:
type
  TmypBPW = class
  private
    class procedure DoClick(Sender: TObject);
  end;

pBPW.OnClick := TmypBPW.DoClick;
Und OnClick würde ich solche Prozeduren sowieso nicht.
Bezeichner für Event-Handler vs. Bezeichner für Event-Methoden.

Da hier Button und Edit in der Form liegen, gehört das Event dafür auch in diese Klasse rein.
Wenn aber dennoch in einer anderen Klasse, dann werden NIEMALS die globalen Variablen verwendet, sondern diese Instanz bekommt Zeiger auf diese Komponenten übergeben und/oder Ereignisse für den Rückruf.



hallo,
das war ein Fehler beim kopieren.

der code muss natürlich entsprechend dem Programm angepasst werden.

Gruß

NoName1 17. Mai 2024 10:49

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Vielen Dank für Eure Antworten.
Ich komme erst jetzt dazu mich weiter mit dem Problem zu befassen. Womöglich habe ich mich falsch ausgedrückt.
Korrekt ist: Wie kann die Prozedure im OnClick-Ereignis so ausgeführt werden, das die Eingabe im "pEdtPW"-Feld angezeigt werden?
In einer neuen Procedure ist ja das "pEdtPW"-Feld gar nicht bekannt. Wie mache ich es in der Procedure bekannt, so dass ich auf deren
Eigenschaften usw. zugreifen kann.

Wenn mir dazu jemand die korrekte Lösung gibt, käme ich auch bei anderen Problemen weiter. Bitte eine Lösung, wenn möglich, an der ich alles
nachvollziehen kann. Es hilft mir nicht mit "lese hier, lese dort usw." Ein klares Beispiel hilft mir weiter!

Vielen Dank für Eure Hilfen.

TurboMagic 17. Mai 2024 11:15

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Hallo,

ja dein Edit ist woanders nicht bekannt, da es scheinbar eine lokale Variable innerhalb
der Methode ist. Spricht aber etwas dagegen dieses Edit als Feld in der Klasse selbst,
welche diese Methoden enthält anzulegen? Im private oder strict private Block.
Dann könnten alle Methoden dieser Klasse bei bedarf drauf zugreifen.

NoName1 17. Mai 2024 12:31

AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
 
Danke für die Antwort TurboMagic.
Nun gelingt es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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