![]() |
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:
Vielen Dank für Eure Hilfen im Voraus.
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; |
AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
Delphi-Quellcode:
, welche zu z.B. in TfrmFNCSchriftverkehr deklariert hast.
pBPW.OnClick := NameDeinerMethodeOderKlassenMethode;
Delphi-Quellcode:
Und per Code Ausführen
type
TfrmFNCSchriftverkehr = class(TForm) ... private procedure MeinClickEreigniss(Sender: TObject); end;
Delphi-Quellcode:
pBPW.Click;
|
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; |
AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
Delphi-Quellcode:
sicher nicht die hochprofessionellste Lösung
procedure TForm1.btnKeylockClick(Sender: TObject);
begin if (edtKey.PasswordChar='*') then begin (edtKey.PasswordChar:=#0)end else edtKey.PasswordChar:='*'; end; |
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ß |
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:
Und OnClick würde ich solche Prozeduren sowieso nicht.
type
TmypBPW = class private class procedure DoClick(Sender: TObject); end; pBPW.OnClick := TmypBPW.DoClick; 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. |
AW: Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
Zitat:
hallo, das war ein Fehler beim kopieren. der code muss natürlich entsprechend dem Programm angepasst werden. Gruß |
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. |
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. |
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 07:29 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-2025 by Thomas Breitkreuz