![]() |
ComboBox: Breite der DropDown-Liste ändern
Hallo Mädels :mrgreen: ,
ich möchte mehrere Spalten in einer ComboBox anzeigen lassen und hab dafür den ![]() Das funktioniert auch bestens. Nur möchte ich auch die Breite der DropDown-Liste der ComboBox ändern. Dafür gibt es von den Schweizern diesen ![]() Wenn ich nun die Zeile:
Delphi-Quellcode:
in den oberen Code bei "ComboBox1DrawItem" als letzte Zeile einfüge, dann funktioniert das Ändern der Breite nicht.
ComboBox1.Perform(CB_SETDROPPEDWIDTH, PIXEL_WIDTH, 0);
Die DropDown-Liste bleibt gleich groß. Geht der Code nicht, weil
Delphi-Quellcode:
gemacht wurde?
Combobox1.Style := csOwnerDrawFixed;
Delphi-Quellcode:
:-D
case Antwort of
ja : Wie könnt ich das anders realisieren? nein: Was mach ich falsch? end; |
Re: ComboBox: Breite der DropDown-Liste ändern
Hi,
nein, mach es nur einmal im FormActivate, das sollte eigentlich reichen. Gruss |
Re: ComboBox: Breite der DropDown-Liste ändern
Zitat:
das nutzt leider nichts. Bleibt gleich groß |
Re: ComboBox: Breite der DropDown-Liste ändern
Hallo,
im OnCreate der Form in der Reihenfolge funktioniert es bei mir:
Delphi-Quellcode:
const
PIXEL_WIDTH = 200; begin Combobox.Style := csOwnerDrawFixed; with Combobox.Items do begin Add('first;second;third;'); Add('column1;column2;column3;'); end; ComboBox.Perform(CB_SETDROPPEDWIDTH, PIXEL_WIDTH, 0); |
Re: ComboBox: Breite der DropDown-Liste ändern
Hallo,
hattest du auch was im OnDrawItem drin? Ich hatte deinen Code getestet - nur hat sich nichts verändert. Es bleibt so groß wie die Combobox ist. |
Re: ComboBox: Breite der DropDown-Liste ändern
Hallo,
ja, hatte in einem neuen Projekt die beiden Tipps der Schweitzer zusammengebaut. |
Re: ComboBox: Breite der DropDown-Liste ändern
kannst mir mal dein projekt geben?
|
Re: ComboBox: Breite der DropDown-Liste ändern
Moin Lü :hi:
Ich habe einfach mal eine ComboBox genommen und nur das Teil eingebaut:
Delphi-Quellcode:
So klappt das schon.
procedure TForm1.FormCreate(Sender: TObject);
begin cbx.Perform(CB_SETDROPPEDWIDTH, 200, 0); end; |
Re: ComboBox: Breite der DropDown-Liste ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
anbei mal ein Testprogramm zusammengesetzt aus den Codes der Schweizern und so gehts nicht! [EDIT] Jetzt hab ich es rausgefunden - man kann die DropDown-Liste nicht kleiner machen als das ComboBox.Width ist - größer kein Problem! [/Edit] |
Re: ComboBox: Breite der DropDown-Liste ändern
:wall:
Man, man, man. Da muss man erst einmal drauf kommen:
Delphi-Quellcode:
Vor Perform muss man einen Eintrag in Items so lang machen, dass es mindestens so lang ist, wie die Liste dann breit sein soll.
With ComboBox1.Items Do
Begin Add('################################'); ComboBox1.Perform(CB_SETDROPPEDWIDTH, PIXEL_WIDTH, 0); Clear; End; Viel Spaß noch. |
Re: ComboBox: Breite der DropDown-Liste ändern
Moin :-)
Erstmal zum Verständnis:
Code:
Das Setzen der Breite hat nur dann den gewünschten Erfolg, wenn der Wert von DropDownListBreite größer ist als die Breite (=Width) der Combobox! Mit anderen Worten: ist der Wert von DropDownListBreite kleiner als die Breite der DropDownListe, hat der o.a. Code keine Auswirkung, da die Breite der DropDownListe sich dann standardmäßig der Breite der ComboBox anpasst ;)
Perform(CB_SETDROPPEDWIDTH, DropDownListBreite, 0);
Möchte man nun - wie gewünscht - die Breite der DropDownListe dem längsten Eintrag in der Combobox anpassen: (von den Schweizern)
Code:
//--nach dem Füllen der Items in der Combobox
procedure TForm1.BreiteAnpassen(Sender: TObject); var i, DropDownListBreite: Integer; begin DropDownListBreite := 0; for i := 0 to Combobox1.Items.Count - 1 do if (Form1.Canvas.TextWidth(Combobox1.Items[i]) <> DropDownListBreite) then DropDownListBreite := Form1.Canvas.TextWidth((Combobox1.Items[i])) + 20; ComboBox1.Perform(CB_SETDROPPEDWIDTH, DropDownListBreite, 0); end; |
Re: ComboBox: Breite der DropDown-Liste ändern
Delphi-Quellcode:
Die beiden Befehle, die Du hier brauchst sind 'GetWindowRect', um die Abmessungen der Liste zu bekommen und 'MoveWindow', um die neue Größe zu setzen. Ich hab den Code aus Faulheit nur aus einem Projekt von mir rauskopiert, aber ich denke, der Sinn wird deutlich.
//______________________________________________________________________________
Procedure TDieComboBox.SetListHandle(_hHandle: HWND); Var R:TRect; iX:integer; Begin If _hHandle<>ListHandle Then Begin If _hHandle<>0 Then Begin hListHandle:=_hHandle; pDefListProc := Pointer(GetWindowLong(hListHandle, GWL_WNDPROC)); SetWindowLong(hListHandle, GWL_WNDPROC, Longint(pListInstance)); Case LBShowState Of lbsFullSizeLeft, lbsFullSizeRight, lbsFullSizeCenter: Begin GetWindowRect(ListHandle,R); R.Right:=R.Left+CellSize*11+2; R.Bottom:=R.Top+CellSize*10+2; iX:=0; Case LBShowState Of lbsFullSizeRight: iX:=Width-(R.Right-R.Left); lbsFullSizeCenter: iX:=(Width-(R.Right-R.Left)) DIV 2; End; MoveWindow (ListHandle,R.Left+iX,R.Top,R.Right - R.Left, R.Bottom - R.Top,TRUE ); End; End; End Else Begin SetWindowLong(hListHandle, GWL_WNDPROC, Longint(pDefListProc)); hListHandle:=0; End; End; End; |
Re: ComboBox: Breite der DropDown-Liste ändern
Du kannst auch alternativ mit
Delphi-Quellcode:
der Liste ne horizontale Scrollbar verpassen.
//______________________________________________________________________________
Procedure TDieComboBox.CreateParams(Var _Params: TCreateParams); Begin Inherited; _Params.Style:=_Params.Style or WS_HSCROLL; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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