AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen
Thema durchsuchen
Ansicht
Themen-Optionen

Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen

Ein Thema von NoName1 · begonnen am 27. Apr 2024 · letzter Beitrag vom 17. Mai 2024
Antwort Antwort
NoName1

Registriert seit: 8. Mär 2018
196 Beiträge
 
Delphi 11 Alexandria
 
#1

Zur Laufzeit erzeugten Button das OnClick-Ereignis ausführen

  Alt 27. Apr 2024, 08:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.202 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 27. Apr 2024, 09:06
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
pBPW.Click;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Apr 2024 um 09:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.546 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 27. Apr 2024, 09:10
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
415 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

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

  Alt 27. Apr 2024, 09:33
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
Norbert
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
324 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 27. Apr 2024, 09:34
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ß

Geändert von mmw (27. Apr 2024 um 14:50 Uhr) Grund: kopierfehler behoben
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.202 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 27. Apr 2024, 09:54
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
324 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 27. Apr 2024, 10:00
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ß
  Mit Zitat antworten Zitat
NoName1

Registriert seit: 8. Mär 2018
196 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 17. Mai 2024, 10:49
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.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.856 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 17. Mai 2024, 11:15
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.
Grüße
TurboMagic
  Mit Zitat antworten Zitat
NoName1

Registriert seit: 8. Mär 2018
196 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 17. Mai 2024, 12:31
Danke für die Antwort TurboMagic.
Nun gelingt es.
  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 21:23 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