Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden (https://www.delphipraxis.net/177724-formular-mit-tedit-als-pflichtfeld-mit-button-onclick-beenden.html)

pischti 23. Nov 2013 19:03

Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden
 
Hallo zusammen,

ich habe ein Formular mit einem Pflichtfeld TEdit. Diese prüfe ich auf "Leer" nach OnExit was ja soweit auch funktioniert. Jetzt ist aber so, dass das Formular auch ein Beenden Button enthält, worüber ich jeder Zeit das Formular schließen möchte.

Wie kann ich in dem Ereignis OnExit abfragen, ob das Feld durch Klick auf das nächste Feld oder durch Button klick verlassen wurde?

Ich habe schon mit Sender versucht, aber ohne Erfolg. Als Klassenname kommt nur TEdit an.
Code:
procedure TEinbuchenForm.txtEanArtNrExit(Sender: TObject);
begin
  {
    ShowMessage(Sender.ClassName);

  if Sender = btnBeenden then
    ShowMessage('Beenden wurde geklickt');
  }
  if txtEanArtNr.Text = '' then
  begin
    if Dialogs.MessageDlg('Eingabe von EAN oder Artikelnummer erforderlich!' +
      chr(10) + 'Einbuchen fortsetzen?', mtWarning, [mbYes, mbNo], 0, mbYes) = mrYes
    then
    begin
      txtEanArtNr.SetFocus;
    end
    else
      Close;
  end
  else
  begin
    // Artikel anhand von EAN oder Artikelnummer suchen
    qryArtikel.Close;
    qryArtikel.Sql.Clear;
    SQLBefehl := 'SELECT * FROM artikel WHERE art_ean_nr = ''' +
      txtEanArtNr.Text + '''';
Danke schon mal für die Hilfe
Pischti

pischti 23. Nov 2013 19:47

AW: Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden
 
Hallo,

ich habe jetzt doch noch eine Lösung gefunden.
Vielleicht hilft sie Anderen :)
Pischti
Delphi-Quellcode:
if not (ActiveControl = btnBeenden) then ShowMessage('Beenden wurde NICHT geklickt')
  else ShowMessage('Beenden wurde geklickt');

Perlsau 23. Nov 2013 19:53

AW: Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden
 
Mach doch einfach einen Button Übernehmen und einen Button Abbrechen: Beim Klick auf Übernehmen wird geprüft, ob im Pflichtfeld was Sinnvolles drinsteht, beim Abbrechen-Button nicht. Klickt der Anwender nun auf Übernehmen, ohne das Pflichtfeld ausgefüllt zu haben, verweigerst du einfach das Schließen des Formulars. Du kannst aber auch den Button Übernehmen beim Aufruf des Formulars auf Enabled := False stellen, bis im Editfeld was drinsteht: Beim Verlassen des Editfelds prüfst du, ob was drinsteht; steht was drin, schaltest du den Übernehmen-Button auf Enabled := True.

pischti 23. Nov 2013 20:15

AW: Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden
 
Hallo Frank,
ja, daran habe ich auch gedacht, aber....
Wenn der Benutzer die Eingabe macht (und das Feld nicht leer ist), wird sofort geprüft, ob der Datensatz existiert.
Existiert er, werden die Werte in die restlichen Felder übernommen. Er muss nur noch die neue Menge zum Zubuchen eingeben.
Wenn der Datensatz nicht existiert, wird ein neuer angelegt und die Übernahme auf Enabled gesetzt.

Aber wie gesagt, jetzt funktioniert.
Trotzdem Danke
Pischti

Furtbichler 24. Nov 2013 11:00

AW: Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden
 
Zitat:

Zitat von pischti (Beitrag 1237191)
Delphi-Quellcode:
if not (ActiveControl = btnBeenden) then ShowMessage('Beenden wurde NICHT geklickt')
  else ShowMessage('Beenden wurde geklickt');

Das geht einfacher und ohne Gehirnverknotung
Delphi-Quellcode:
if ActiveControl <> btnBeenden then
  ShowMessage('Beenden wurde NICHT geklickt')
else
  ShowMessage('Beenden wurde geklickt');
//
// oder gleich
//
if ActiveControl = btnBeenden then
  ShowMessage('Beenden wurde geklickt')
else
  ShowMessage('Beenden wurde NICHT geklickt');

baumina 25. Nov 2013 06:29

AW: Formular mit TEdit als Pflichtfeld mit Button.OnClick beenden
 
Wichtig wäre evtl. noch zu wissen, dass der Button beim Klick nicht unbedingt den Fokus erhält (z.B. Default-Button und Enter oder Cancel-Button und ESC oder über den AccelChar Alt-[Buchstabe]), dann klappt das mit der ActiveControl nur, wenn du im OnClick des Buttons diesen auch mit SetFocus fokussierst.


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