AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ComboBox: Breite der DropDown-Liste ändern

Ein Thema von Helmi · begonnen am 8. Jan 2007 · letzter Beitrag vom 9. Jan 2007
Antwort Antwort
Seite 2 von 2     12   
raiguen
(Gast)

n/a Beiträge
 
#11

Re: ComboBox: Breite der DropDown-Liste ändern

  Alt 9. Jan 2007, 11:07
Moin
Erstmal zum Verständnis:
Code:
Perform(CB_SETDROPPEDWIDTH, DropDownListBreite, 0);
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
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;
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#12

Re: ComboBox: Breite der DropDown-Liste ändern

  Alt 9. Jan 2007, 11:17
Delphi-Quellcode:
//______________________________________________________________________________
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;
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.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#13

Re: ComboBox: Breite der DropDown-Liste ändern

  Alt 9. Jan 2007, 11:33
Du kannst auch alternativ mit
Delphi-Quellcode:
//______________________________________________________________________________
Procedure TDieComboBox.CreateParams(Var _Params: TCreateParams);
Begin
  Inherited;
  _Params.Style:=_Params.Style or WS_HSCROLL;
End;
der Liste ne horizontale Scrollbar verpassen.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 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