Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TEdit komplett markieren bei Mausklick (https://www.delphipraxis.net/126295-tedit-komplett-markieren-bei-mausklick.html)

ralfiii 22. Dez 2008 10:53


TEdit komplett markieren bei Mausklick
 
Hallo!

Ich hätte gerne, dass ein TEdit-Feld erstmal alles markiert wenn der User draufclickt.
(So dass man drauflosschreiben kann um den Inhalt zu überschreiben und nicht erst alles markieren muss)

Erst wenn das Edit schon den Fokus hat und mann nochmal klickt soll nur der Mauscursor zu sehen sein.
(so verhält sich z.B. die Addressleiste beim Firefox)

Wie mach ist das? (SelectAll in OnEnter aufrufen tut's beispielsweise nicht)

Danke!
Ralf

lbccaleb 22. Dez 2008 11:03

Re: TEdit komplett markieren bei Mausklick
 
Delphi-Quellcode:
SendMessage(Edit1.handle, EM_SETSEL, 0, -1);
Hoffe das hilft??

toms 22. Dez 2008 11:05

Re: TEdit komplett markieren bei Mausklick
 
Delphi-Quellcode:
procedure TForm1.Edit1Click(Sender: TObject);
begin
 with (Sender as TEdit) do
 begin
   if Tag = 0 then
   begin
     Perform(EM_SETSEL, 0, -1);
     Tag := 1;
   end;
 end;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  (Sender as TEdit).Tag := 0;
end;

ralfiii 22. Dez 2008 11:18

Re: TEdit komplett markieren bei Mausklick
 
Danke!

Ein
Delphi-Quellcode:
     PostMessage(Edit1.handle, EM_SETSEL, 0, -1);
in den OnEnter-Event uns alles ist gut.

himitsu 24. Dez 2008 11:09

Re: TEdit komplett markieren bei Mausklick
 
Wie wäre es einfach mit .AutoSelect auf True setzen und alles is Gut? :stupid:

API 24. Dez 2008 12:01

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von himitsu
Wie wäre es einfach mit .AutoSelect auf True setzen und alles is Gut? :stupid:

Zitat:

Zitat von ralfiii
Ich hätte gerne, dass ein TEdit-Feld erstmal alles markiert wenn der User draufclickt.

Geht das bei dir tatsächlich?

himitsu 24. Dez 2008 13:37

Re: TEdit komplett markieren bei Mausklick
 
es wird alles markiert, sobald das Edit den Focus bekommt und bei einem weiteren Klicken passiert nichts mehr,
also genauso wie er es möchte

Zitat:

Zitat von ralfiii
Hallo!

Ich hätte gerne, dass ein TEdit-Feld erstmal alles markiert wenn der User draufclickt.
(So dass man drauflosschreiben kann um den Inhalt zu überschreiben und nicht erst alles markieren muss)

Erst wenn das Edit schon den Fokus hat und mann nochmal klickt soll nur der Mauscursor zu sehen sein.
(so verhält sich z.B. die Addressleiste beim Firefox)

Wie mach ist das? (SelectAll in OnEnter aufrufen tut's beispielsweise nicht)

Danke!
Ralf


ts230 24. Dez 2008 18:44

Re: TEdit komplett markieren bei Mausklick
 
Delphi-Quellcode:
Edit1.SelectAll;

Michael Habbe 25. Dez 2008 00:07

Re: TEdit komplett markieren bei Mausklick
 
Es gibt noch 'ne Möglichkeit:

Delphi-Quellcode:
procedure btnXYClick(Sender: TObject);
begin
  edt.SetFocus;
  edt.SelStart := 0;
  edt.SelLength := Length(edt.Text);
end;
Ich weiss nicht, obs auch mit OnEnter klappt. Ausprobieren.
btnXY ist bei mir ein Defaultbutton.

Könnte aber sein, dass auch dieses nicht beim Klick funktioniert.
Ich vermute, dass die Reihenfolge der Ereignisse erst den OnFocus auslöst und dann das Klick den Focus an die Position der Maus setzt und damit die Selektion aufhebt.

Dann könntest Du aber das OnClick-Ereignis mal testen, obs in der Routine funktioniert.

TonyR 25. Dez 2008 00:16

Re: TEdit komplett markieren bei Mausklick
 
Also bei meinen Edits, die ich hier produzieren kann, ist AUTOSELECT:=true STANDARD!

Und dabei wird im Edit zwar beim Enterereignis über Tastatur alles markiert, bei der Maus wird bei einfach Klick nichts markiert, bei Doppelklick funktioniert das dann erst wieder.

Somit ist der allererste Vorschlag wohl am effizientesten.

Micha88 25. Dez 2008 00:17

Re: TEdit komplett markieren bei Mausklick
 
Wieso nicht ganz einfach so:

Delphi-Quellcode:
procedure TForm1.Edit1Click(Sender: TObject);
begin
 Edit1.SelectAll;
end;
Edit: hatte mir das Problem nicht richtig durchgelesen ..

Namenloser 25. Dez 2008 00:20

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von MichaelLinden
Wieso nicht ganz einfach so:

Delphi-Quellcode:
procedure TForm1.Edit1Click(Sender: TObject);
begin
 Edit1.SelectAll;
end;

Weil man auch über die Tab-Taste das Edit fokussieren kann.

Michael Habbe 25. Dez 2008 00:21

Re: TEdit komplett markieren bei Mausklick
 
Das klappt wunderbar.
Mit der Tabulatortaste wird wie gehabt alles markiert.

TonyR 25. Dez 2008 00:25

Re: TEdit komplett markieren bei Mausklick
 
Michael Linden, dabei benötigt man extra noch wieder eine Variable, die man andauernd umschalten muss, weil das Markieren ja nur beim ersten Klicken aufs Edit stattfinden soll, also immer nur wenns den Fokus bekommt.

Michael Habbe 25. Dez 2008 00:55

Re: TEdit komplett markieren bei Mausklick
 
Ok. Lesen bildet.

Aber beim Firefox verhält es sich (scheinbar) so, dass nach kompletter Markierung der Adresse der Fokus aus dem Edit verschwindet. Zumindest blinkt da nix mehr. :gruebel:


Nun, wie Tony schon schrieb, nimm ein paar Variablen und setze sie in den Ereignissen OnEnter, OnKlick und OnMausDaun. :dp:

API 25. Dez 2008 07:36

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von himitsu
es wird alles markiert, sobald das Edit den Focus bekommt und bei einem weiteren Klicken passiert nichts mehr,
also genauso wie er es möchte

Bei welcher Delphi Version ist das so?
Bei mir wird nur alles markiert, wenn mit Tab navigiert wird, jedoch wird bei einfachem Klick auf das Edit
nicht alles markiert bei AutoSelect := True.
Das dürfte bei allen Delphi Versionen so sein.

lbccaleb 25. Dez 2008 07:56

Re: TEdit komplett markieren bei Mausklick
 
Versteh gerade euer Problem nicht! :gruebel:

Denn:

Zitat:

Zitat von ralfiii
Ein
Delphi-Quellcode:
     PostMessage(Edit1.handle, EM_SETSEL, 0, -1);
in den OnEnter-Event uns alles ist gut.

geht bei mir genauso gut!

Edit:
Auch mit Tabulator!

API 25. Dez 2008 08:00

Re: TEdit komplett markieren bei Mausklick
 
Ja, das PostMessage() funktioniert hervorragend. SelectAll im OnClick und Setzen des AutoSelect := True funktinieren hingegen nicht. Man kann das ja mal selber ausprobieren, bevor so was als Lösung präsentiert wird.

himitsu 26. Dez 2008 16:43

Re: TEdit komplett markieren bei Mausklick
 
komisch, ar mir garnicht so aufgefallen, aber es stimm, wenn man es mit der Maus anklickt, wird die Marierung nicht so gesetzt, wie gedacht :shock:
(ich arbeite wohl wirlich zuviel mit der Tastatur, anstatt mit der Maus)

hab aber grad nochma in der OH nachgeschaut und da klingt es auch anders, als es ist :gruebel:
Zitat:

Die Eigenschaft AutoSelect bestimmt, ob der gesamte Text im Eingabefeld automatisch markiert wird, wenn das Steuerelement den Fokus erhält.
schon komisch, was ein not (csLButtonDown in ControlState) in CM_ENTER so alles verändert :wall:

PS: da EM_SETSEL eine Nachricht mit Rückgabewert ist, wäre SendMessage (statt PostMessage) richtiger,
oder direkt .SelectAll :angel2:

Und dann wolltest du es doch nur beim ersten Klick markiert haben, also .OnEnter, statt .OnClick
hmmm OnClick wird nach OnEnter ausgeführt und irgendwie wird da der Cursor nochmal neu gesetzt :gruebel:


Aber ein Problem hast du dennoch ... du wolltest doch nicht mehr alles markiert haben, wenn du nochmals Klickst und das geht im OnClick nicht.

toms 26. Dez 2008 19:27

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von himitsu
Aber ein Problem hast du dennoch ... du wolltest doch nicht mehr alles markiert haben, wenn du nochmals Klickst und das geht im OnClick nicht.

Darum einfach ein .SelectAll im OnEnter. Das PostMessage / SendMessage ist unnötig, da ein .SelectAll
dies aufruft:
Delphi-Quellcode:
 SendMessage(Handle, EM_SETSEL, 0, -1);

himitsu 26. Dez 2008 19:50

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von toms
Darum einfach ein .SelectAll im OnEnter.

wollt ich vorhin schon vorschlagen, aber das funktioniert so nicht.

toms 26. Dez 2008 20:01

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von toms
Darum einfach ein .SelectAll im OnEnter.

wollt ich vorhin schon vorschlagen, aber das funktioniert so nicht.

Stimmt.. :wall: Aus irgend einem Grund habe ich ja diesen Vorschlag gemacht:
http://www.delphipraxis.net/internal...=978980#978980

himitsu 26. Dez 2008 20:25

Re: TEdit komplett markieren bei Mausklick
 
Dann bleibt wohl nur 'ne Kombination aus AutoSelect=True und den Markieren im OnClick.

Beim FireFox (grad probiert) wird auch (sozusagen) im OnClick (also beim Loslassen der Maustaste) alles in den Adress- und Such-Edits markiert.

Und wen die Variable stört, dafür gibt's auch andere Möglichkeiten etwas direkt im Edit zu speichern. (also wenn wer keine zusätzliche Variable erstellen will und .Tag schon belegt ist)

TonyR 27. Dez 2008 17:24

Re: TEdit komplett markieren bei Mausklick
 
OFFTOPIC: [Wow, dafür dass ein möglicher Lösungsansatz schon in der ersten Antwort vorhanden war, ist das ein recht langer Thread geworden :lol: ]

himitsu 27. Dez 2008 17:30

Re: TEdit komplett markieren bei Mausklick
 
@TonyR: wer sagt, daß man sich mit der ersten antwort zufriden geben muß ... womöglich existiert ja noch 'ne bessere/schönere/optimalere Lösung :roll:

API 27. Dez 2008 17:31

Re: TEdit komplett markieren bei Mausklick
 
Zitat:

Zitat von TonyR
OFFTOPIC: [Wow, dafür dass ein möglicher Lösungsansatz schon in der ersten Antwort vorhanden war, ist das ein recht langer Thread geworden :lol: ]

Ja, da es nur ein Ansatz war und keine komplette Lösung.


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