![]() |
ComboBox nach TabStop True/False Text markiert
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich stehe aktuell etwas vor einem Rätsel. In meiner Anwendung werden ComboBoxen zur Laufzeit mit TabStopp True/False gesetzt. Jetzt ist es aber so, dass die ComboBoxen dannach den SelText blau hinterlegen. Dieses verhalten ist ziemlich nervig und unschön, hat dieses Problem schon einmal jemand gehabt? Gruß Eppos |
AW: ComboBox nach TabStop True/False Text markiert
Delphi XE und 11 ... keine Änderung, nur weil man TabStop ändert,
und kann mich auch nicht erinnern, dass es irgendwann mal anders war. :gruebel: * Fokus bleibt dort wo er war (das was den Fokus hat, ist blau) * wenn aller Text selektiert war, was er standardmäßig ist (nachdem der Fokus rein ging), bleibt er es auch * also ja, alles blau, so wie es sein soll (wenn ich es über einen Timer oder einen SpeedButton ändere) * wenn ich auf den normalen Button drücke, dann bekommt er den Fokus und ComboBoxen sind weiß * sowas wie DoubleBuffered=True hat auch keine Wirkung * VCL-Styles wirst'e wohl nicht verwenden * hmmmm... Das ist ein Text-"Edit", also
Delphi-Quellcode:
(nach dem Fokusieren, bzw. beim Umschalten)
ComboBox.SelLength := 0;
oder SetFocus wo anders hin und eben keinen Fokus im Edit/ComboBox und schon ist auch nichts blau. |
AW: ComboBox nach TabStop True/False Text markiert
Liste der Anhänge anzeigen (Anzahl: 1)
* Fokus bleibt dort wo er war (das was den Fokus hat, ist blau)
--> Das ist ja der Witz, Fokus hat das Edit-Feld und wenn ich auf den Button drücke, ist der Fokus auf dem Button. Die ComboBoxen haben nie den Fokus erhalten. * wenn aller Text selektiert war, was er standardmäßig ist (nachdem der Fokus rein ging), bleibt er es auch --> Der Fokus war nicht auf der CB * wenn ich auf den normalen Button drücke, dann bekommt er den Fokus und ComboBoxen sind weiß --> Nein ist nicht der Fall habe das Projekt mal hochgeladen |
AW: ComboBox nach TabStop True/False Text markiert
Ohh, das ist komischt.
Mit Items in den ComboBoxen, passiert das wirklich ohne Items nicht. Der DropDown geht ja garnicht auf und ich wäre davon ausgegangen "Text ist Text", da im Edit, vor allem da ItemIndex ja -1 und somit garnkein Item aktiv ist. :shock: Ein Darstellungsfehler, beim Ändern, scheint es auxch nicht zu sein. Self.Repaint, sowie ComboBox2.Repaint ändern nichts, aber, wie gesagt:
Delphi-Quellcode:
procedure TForm21.Button1Click(Sender: TObject);
begin ComboBox1.TabStop := False; ComboBox1.TabStop := True; ComboBox2.TabStop := False; ComboBox2.TabStop := True; ComboBox2.SelLength := 0; end; |
AW: ComboBox nach TabStop True/False Text markiert
Am TabStop selber liegt es garnicht.
Irgendwas im SetWindowLong(GWL_STYLE) bringt das Control durcheinander. Ob es jetzt an Windows oder irgendwas in der VCL liegt, konnte ich nicht entdecken. (mit Debug-DCUs bissl durch die VCL und auf die Schnelle nichts bemerkt) Man könnte jetzt noch mit anderen Sprachen (C++ oder so) das testen, bzw. mal eine NonVCL-ComboBox erstellen und auch dort schauen. Aus TComboBox.SetTabStop den relevanten Code rausgeholt und Zeilen einzeln getestet und unwichtiges auskommentiert:
Delphi-Quellcode:
{ ComboBox2.TabStop := Value; }
//PBoolean(@ComboBox2.TabStop)^ := Value; Style := GetWindowLong(ComboBox2.Handle, GWL_STYLE) {and not WS_TABSTOP}; //if Value then Style := Style or WS_TABSTOP; SetWindowLong(ComboBox2.Handle, GWL_STYLE, Style); //ComboBox2.Perform(CM_TABSTOPCHANGED, 0, 0);
Delphi-Quellcode:
Style := GetWindowLong(ComboBox2.Handle, GWL_STYLE);
SetWindowLong(ComboBox2.Handle, GWL_STYLE, Style); // das hier ist Schuld siehe
Delphi-Quellcode:
procedure TWinControl.SetTabStop(Value: Boolean);
var Style: NativeInt; begin if FTabStop <> Value then begin FTabStop := Value; if HandleAllocated then begin Style := GetWindowLong(WindowHandle, GWL_STYLE) and not WS_TABSTOP; if Value then Style := Style or WS_TABSTOP; SetWindowLong(WindowHandle, GWL_STYLE, Style); end; Perform(CM_TABSTOPCHANGED, 0, 0); end; end; |
AW: ComboBox nach TabStop True/False Text markiert
Delphi-Quellcode:
Liegt dann wohl nicht an der Delphi-VCL.
type
TForm1 = class(TForm) ... private ComboBox3: HWND; end; implementation uses Winapi.CommCtrl; procedure TForm1.Button1Click(Sender: TObject); var Style: Integer; begin ... Style := GetWindowLong(ComboBox3, GWL_STYLE); SetWindowLong(ComboBox3, GWL_STYLE, Style); end; procedure TForm1.FormCreate(Sender: TObject); begin ComboBox3 := CreateWindowEx(0, WC_COMBOBOX, '', WS_VSCROLL or CBS_HASSTRINGS or CBS_AUTOHSCROLL or CBS_DROPDOWN or WS_CHILD or WS_OVERLAPPED or WS_VISIBLE, ComboBox2.Left, ComboBox2.Top+30, ComboBox2.Width, ComboBox2.Height, Self.Handle, 0, HInstance, 0); SendTextMessage(ComboBox3, CB_ADDSTRING, 0, 'ComboBox3'); SetWindowText(ComboBox3, 'ComboBox3'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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