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 ComboBox Inhalt nicht markieren (https://www.delphipraxis.net/105056-combobox-inhalt-nicht-markieren.html)

BenniP 14. Dez 2007 21:50


ComboBox Inhalt nicht markieren
 
Hallo,

ich hab ein kleines Problem.
Auf meinem Form ist eine ComboBox mit dem Style csDropDown.
Ich versuche die Cursorposition mit .SelStart auszulesen.

Was bei Edit auch hervorragend klappt, nur nicht bei der ComboBox.
Der gesamte Inhalt wird markiert sobald man sie anklickt und .SelStart (logischer weise) auf 0 gesetzt.

Meine Frage ist nun, kann ich der ComboBox diese Verhalten abgewöhnen? :)

Besten Dank!

blackdrake 14. Dez 2007 23:00

Re: ComboBox Inhalt nicht markieren
 
Ist es korrekt, dass du verhindern willst, dass wenn du ein vordefiniertes Item aus der Combobox auswählst, der komplette Text selektriert wird? Du willst also, dass die (Text-)Cursorposition beim ändern der Selektion beibehalten bleibt?

BenniP 15. Dez 2007 08:03

Re: ComboBox Inhalt nicht markieren
 
Um das Verhalten der auszuwählenden Einträge hab ich mir noch keine Gedanken gemacht.

Es geht mir nur um das Problem das der komplette Text markiert wird beim Anklicken der ComboBox.
Wenn sich das Verhalten der Auswahl von Einträge auch ändern ist mir das (relativ) egal.

scrat1979 15. Dez 2007 08:19

Re: ComboBox Inhalt nicht markieren
 
Zitat:

Zitat von BenniP
Um das Verhalten der auszuwählenden Einträge hab ich mir noch keine Gedanken gemacht.

Es geht mir nur um das Problem das der komplette Text markiert wird beim Anklicken der ComboBox.
Wenn sich das Verhalten der Auswahl von Einträge auch ändern ist mir das (relativ) egal.

Ganz einfach OwnerDraw benutzen und die Einträge selbst zeichnen. Ist wirklich ganz einfach! Such mal im Forum danach (Evtl. auch im VCL-Quelltext wie Borland das macht). In der Routine wird normalerweise einfach der Hintergrund des markierten Eintrages gesetzt. Wenn Du die Zeile weglässt hast Du das was Du möchtest. Dein OnDrawItem wird nur ca. 10 Zeilen lang sein - ist also wirklich nicht schwer!

SCRaT

//EDIT: Habe gerade bemerkt, daß Du was für eine Combobox suchst. Wer lesen kann ist klar im Vorteil.
Trotzdem möchte ich Dir folgenden Quelltext nicht vorenthalten, evtl. kannst Du Dir davon was für Dein Problem abschauen. Vergiß nicht, vorher im OI den STyle auf OwnerDraw zu stellen!!! Viel Spaß...

Delphi-Quellcode:
procedure TForm2.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do begin      // in ListBox zeichnen
    if odSelected in State then
      Brush.Color := $00FF00
    else
      Brush.Color := $FFFFFF;

    Brush.Style := bsSolid;
    FillRect(Rect);
    Brush.Style := bsClear;
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]); // Text schreiben
  end;
end;

BenniP 15. Dez 2007 09:05

Re: ComboBox Inhalt nicht markieren
 
Ah, OwnerDraw hört sich gut an.
Daran hab ich noch nicht gedacht.

Vielen Dank werde es nachher probieren!

scrat1979 15. Dez 2007 09:15

Re: ComboBox Inhalt nicht markieren
 
Hab gerade noch einen guten link als Vorlage entdeckt :-)

BenniP 15. Dez 2007 16:12

Re: ComboBox Inhalt nicht markieren
 
Hmm, wie kann ich der ComboBox wieder ein Edit-ähnliches Feld zuweisen?

Sobald ich den Style auf OwnerDraw umstelle, verhält sich die ComboBox wie bei csDropdownList.

DelphiFan aus München 3. Nov 2016 15:05

AW: ComboBox Inhalt nicht markieren
 
Hallo,
ich weiß, der Eintrag ist schon ziemlich alt, ist aber trotzdem in meiner App unschön.

Ich habe aber das Gefühl, dass hier ein Bug in Windows oder Delphi vorliegt, nämlich: Das ComboBox-Textfeld bleibt markiert, wenn es einmal markiert wurde. Nur wenn man (einmal oder zweimal) draufklickt, verschwindet die Markierung des Feldes. Zumindest bei mir ist das so bei Delphi 7 und Windows 10.

Zufällig fand ich eine Lösung ohne Interaktion für meine ComboBox z. B. ComboBox1:

with ComboBox1 do SelText := Text;

das geht natürlich nur, wenn ComboBox1.Style := csDropDown ist

Es würde mich interessieren, ob andere auch so was feststellen.

himitsu 3. Nov 2016 15:20

AW: ComboBox Inhalt nicht markieren
 
Was hat
Delphi-Quellcode:
with ComboBox1 do SelText := Text;
mit der Selektierung an sich zu tun?
Hier wird der "aktuell" selektierte Text durch den ganzen Text ersetzt und das Eingefügte ist dann alles selektiert.

PS: Wenn nicht alles oder nichts markiert ist, dann macht der Code ganz nette Dinge.

DelphiFan aus München 3. Nov 2016 15:50

AW: ComboBox Inhalt nicht markieren
 
Hallo,

was ich hier geschrieben hatte, kann ich heute leider gar nicht mehr reproduzieren, sorry


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