Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Edit.SelectAll beim OnEnter - Probleme (https://www.delphipraxis.net/142817-edit-selectall-beim-onenter-probleme.html)

die Suchende 4. Nov 2009 09:49


Edit.SelectAll beim OnEnter - Probleme
 
Hallo Geimende.

bestimmt ist das total einfach und ich schau nur mal wieder nicht richtig dahinter. Folgendes:

Ich habe ein Programm mit mehreren Eingabefeldern (TEdit). Ich habe mir gedacht, dass es für den Anwender bequemer ist, wenn der Text im Eingabefeld beim Reinklicken markiert wird ... analog, wenn man mit der Tab-Taste durchgeht. Das klappt aber irgendwie nicht, obwohl das Ereignis ausgelöst wird:

Delphi-Quellcode:
procedure TfrmStartseite.EditEnter(Sender: TObject);
begin
  TEdit(Sender).SelectAll;
end;
Wenn ich eine Fehlerabfrage mache geht es doch auch:

Delphi-Quellcode:
procedure TfrmStartseite.TelNummerEditChange(Sender: TObject);
begin
  if Funktionen.isPosNumeric(TEdit(Sender).Text) = false then begin
         TEdit(Sender).SelectAll;

         MessageDlg('Bitte geben Sie eine Zahl ein!'
                 + #10 + #13
                 + 'Bitte korrigieren Sie!'
                 , mtInformation, [mbOK], 0);
         exit;
  end;
end;
Verstehe ich nicht. Ich möchte das Markieren aber auch nicht in das OnClick-Ereignis nehmen, weil man ja auch mal irgendwo in den Text oder wie hier in die Telefonnummer klicken möchte, ohne dass gleich der gesamte Text markiert wird.

:roteyes: könnte mir mal bitte jemand auf die Sprünge helfen.

schon mal Danke
die Suchende

Lannes 4. Nov 2009 10:04

Re: Edit.SelectAll beim OnEnter - Probleme
 
Hallo,

Reihenfolge der Ereignisse:
- OnEnter
- OnMouseDown

MouseDown hebt die Selectierung wieder auf.

Also in OnEnter ein Flag setzen und dann entsprechend in OnMouseDown reagieren.

die Suchende 4. Nov 2009 11:07

Re: Edit.SelectAll beim OnEnter - Probleme
 
Danke für die schnelle Antwort,

so was habe ich schon vermutet/ befürchtet ... dafür jetzt extra noch 'ne globale Variable machen zu müssen ... naja


habe übrigens noch was "annormales": im gleichen Programm - meine Editfelder sind auf einem TPageControl untergebracht
- betrifft Editfeld auf einer anderen Seite (anderem TabSheet)
- diesmal Fehlerabfrage im onExit-Ereignis (nicht im ONCange-Ereignis, wie bei der Telefonnummer)

Delphi-Quellcode:
procedure TfrmStartseite.letzteKalEditExit(Sender: TObject);
begin
    if Funktionen.isDateTime(letzteKalEdit.Text) = false then begin
       TEdit(Sender).SetFocus;

       MessageDlg('Die Eingabe der letzten Kalibrierung ist nicht korrekt!' + #10+#13
                   + 'Bitte korrigieren Sie!',
                   mtInformation, [mbOK], 0);
    end;
end;
er geht ordentlich in das Ereignis rein und auch die Auswahl funktioniert. Aber den Text markiert er mir diesmal nicht mit
TEdit(Sender).SelectAll sondern nur mit TEdit(Sender).SetFocus ?

Verstehe ich schon wieder nicht.
die Suchende

Sharky 4. Nov 2009 11:19

Re: Edit.SelectAll beim OnEnter - Probleme
 
Zitat:

Zitat von die Suchende
... dafür jetzt extra noch 'ne globale Variable machen zu müssen ... naja...

Eine globale Variable brauchst Du ja nicht, maximal ein "Property" deiner Form.
Du könntest aber auch die .Tag eigenschaft des TEdits dazu missbrauchen.

Frei nach dem Motto:

OnEnter:
TEdit(Sender).Tag := 1;

OnExit:
TEdit(Sender).Tag := 0;

OnMouseDown:
If (TEdit(Sender).Tag = 1) then TEdit(Sender).SelectAll;

Und neue Frage neuer Thread

Lannes 4. Nov 2009 11:28

Re: Edit.SelectAll beim OnEnter - Probleme
 
Hallo,
Zitat:

Zitat von die Suchende
...dafür jetzt extra noch 'ne globale Variable machen zu müssen ...

kannst doch die Tag-Eigenschaft des Edit dafür nutzen:
Delphi-Quellcode:
//OnEnter
  Edit.Tag := 1;

//OnMouseDown
  if Edit.Tag = 1 then
    begin
    Edit.Tag := 0;
    Edit.SelectAll;
    end;
Das "annormales" ist normal :wink:
SelectAll selektiert auch, Du siehst es nur nicht, weil die Eigenschaft Edit.HideSelection bei dem Edit auf True gesetzt ist.

Bei SetFocus greift die Eigenschaft Edit.AutoSelect.

//Edit: kein roter Kasten, ehrlich :?


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