Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TCombobox Text deselektieren nach SetFocus (https://www.delphipraxis.net/213302-tcombobox-text-deselektieren-nach-setfocus.html)

TurboMagic 5. Jul 2023 19:08

TCombobox Text deselektieren nach SetFocus
 
Gegeben ist eine VCL Form mit u.a. einer TComboBox, Stil csDropDown, drauf.
Klicke ich einen bestimmten Button wird Combo.SetFocus aufgerufen.
Nur ist der bereits eingegebene Text dann immer schon selektiert, was ich nicht will.

Ich habe schon versucht im OnEnter ClearSelection aufzurufen, SelLength auf 0 zu setzen
oder SelStart auf -1.

Hat alles nicht gefruchtet.
Gibt's dazu eine Lösung?

Klaus01 5. Jul 2023 20:30

AW: TCombobox Text deselektieren nach SetFocus
 
.. so tut es bei mir:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.SetFocus;
  ComboBox1.SelStart := 0;
  ComboBox1.SelLength := 0;
end;
Grüße
Klaus

himitsu 5. Jul 2023 21:00

AW: TCombobox Text deselektieren nach SetFocus
 
@Klaus: Er macht im Button nur SetFocus,
aber den Rest im OnEnter.


Tja, eventuell wird die Selection erst nach "deinem" Event gesetzt?

Statt sich an die OnXXX zu hängen, könnte man auch die DoXXX überschreiben.
So Manches wird nach dem VCL-Event gemacht, aber mit etwas Glück noch innerhalb der jeweiligen Windows-Message.

Oder einfach noch etwas warten.
Delphi-Quellcode:
TThread.ForceQueue(nil, procedure
  begin
    DeineComboBox.ClearSelection;
  end;


Alternativ mal die TComboBoxEx versuchen.
Bei einigen Dingen verhält Diese sich anders.

KodeZwerg 5. Jul 2023 21:16

AW: TCombobox Text deselektieren nach SetFocus
 
Zitat:

Zitat von himitsu (Beitrag 1524222)
Oder einfach noch etwas warten.
Delphi-Quellcode:
TThread.ForceQueue(nil, procedure
  begin
    DeineComboBox.ClearSelection;
  end;

Das würde den Inhalt der ComboBox vernichten. :stupid:


Delphi-Quellcode:
// das um sicherzustellen das nichts blau ist nach einer auswahl durchs pop-up oder per scroll
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  PostMessage(ComboBox1.Handle, CB_SETEDITSEL, 0, MAKELPARAM($FFFF, $0000));
end;

// das damit nichts ausgewählt wird wenn die combobox den focus erhält
procedure TForm1.ComboBox1Enter(Sender: TObject);
begin
  PostMessage(ComboBox1.Handle, CB_SETEDITSEL, 0, MAKELPARAM($FFFF, $0000));
end;

TurboMagic 6. Jul 2023 17:48

AW: TCombobox Text deselektieren nach SetFocus
 
Zitat:

Zitat von Klaus01 (Beitrag 1524217)
.. so tut es bei mir:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.SetFocus;
  ComboBox1.SelStart := 0;
  ComboBox1.SelLength := 0;
end;
Grüße
Klaus

Hallo Klaus,

danke, das funktioniert grundsätzlich.
Ich lasse sogar das SelStart weg und es geht auch. Man darf's halt
wohl nicht im OnEnter aufrufen.

Nur: bei mir ist der Cursor danach immer am Textanfang statt am Text Ende.
Kann man das noch irgendwie ändern? Hab' auf die Schnelle nix gefunden...

Grüße

TurboMagic

KodeZwerg 6. Jul 2023 18:00

AW: TCombobox Text deselektieren nach SetFocus
 
Zitat:

Zitat von TurboMagic (Beitrag 1524287)
Hab' auf die Schnelle nix gefunden...

Dann ist wohl meine Antwort unsichtbar für Dich.

Uwe Raabe 6. Jul 2023 18:00

AW: TCombobox Text deselektieren nach SetFocus
 
Zitat:

Zitat von TurboMagic (Beitrag 1524287)
Nur: bei mir ist der Cursor danach immer am Textanfang statt am Text Ende.
Kann man das noch irgendwie ändern? Hab' auf die Schnelle nix gefunden...

Bei SelLength = 0 gibt SelStart die Position vor.

Delphi.Narium 6. Jul 2023 18:14

AW: TCombobox Text deselektieren nach SetFocus
 
Geht das?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.SetFocus;
  ComboBox1.SelStart := Length(ComboBox1.Text) // evntuell + 1?;
  ComboBox1.SelLength := 0;
end;

mytbo 6. Jul 2023 19:26

AW: TCombobox Text deselektieren nach SetFocus
 
Zitat:

Zitat von KodeZwerg (Beitrag 1524290)
Dann ist wohl meine Antwort unsichtbar für Dich.

Warum er deine Antwort nicht berücksichtigt, weiß ich nicht. Noch ein Versuch:
Delphi-Quellcode:
ComboBox.SetFocus;
ComboBox.Perform(CB_SETEDITSEL, 0, 0 {oder -1, wenn der Cursor am Ende stehen soll});
Bis bald...
Thomas

TurboMagic 12. Jul 2023 13:39

AW: TCombobox Text deselektieren nach SetFocus
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1524292)
Geht das?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.SetFocus;
  ComboBox1.SelStart := Length(ComboBox1.Text) // evntuell + 1?;
  ComboBox1.SelLength := 0;
end;

Bin leider erst jetzt wieder zu dem Thema gekommen aber: ja es funktioniert!
Danke!

Grüße
TurboMagic


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.
Seite 1 von 2  1 2      

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