![]() |
Länge der ComboListBox items festlegen
Ich verwende einen alten FileDialog (Ownerdrawn)
Wenn der Ordner den ich öffnen möchte mehr wie 67 Zeichen hat dann ist die Combo Liste an der Position leer. Gibt es einen Trick so das ich die Combo trotzdem mit mehr als 67 Zeichen füllen kann? Theoretisch wären ja MAX_PATH möglich. Das Handle habe ich..
Delphi-Quellcode:
hComboPath := GetDlgItem(hMain, ID_COMBOPATH);
Delphi-Quellcode:
Len ist in dem Fall 0 wenn mehr wie 67 Zeichen.
function TSkinOpenSaveDialog.CBListGetText(hList: HWND; Item: UINT): WideString;
var Len: Integer; begin Len := SendMessage(hList, CB_GETLBTEXTLEN, Item, 0); if Len > 0 then begin SetLength(Result, Len); SendMessage(hList, CB_GETLBTEXT, Item, LPARAM(PWideChar(Result))); end else SetLength(Result, 0); end; gruss |
AW: Länge der ComboListBox items festlegen
Zitat:
|
AW: Länge der ComboListBox items festlegen
Zitat:
Ich habe an den Window Styles nichts verändert was die Combobox angeht. Somit sollte der Style CBS_HASSTRINGS auch vorhanden sein(was er auch ist). gruss |
AW: Länge der ComboListBox items festlegen
Zitat:
|
AW: Länge der ComboListBox items festlegen
Zitat:
Danke. gruss |
AW: Länge der ComboListBox items festlegen
Ich meine, man kann irgendwie die Breite der Liste vorgeben bzw. ändern. Kann es eventuell daran liegen?
|
AW: Länge der ComboListBox items festlegen
Zitat:
Delphi-Quellcode:
Aber wie man sehen kann ist der Eintrag leer.
// Edit update
if (length(SkinEngine.SkinConfigFile) <> 0) and OpenDialog.UseSkin then begin Txt := PWideChar(OpenDialog.GetDlgPath(CDM_GETFILEPATH, WinHandle)); if (not PathIsDirectoryW(Txt)) and (PathFileExistsW(Txt)) then begin Txt := PWideChar(ExtractFileName(Txt)); SkinEngine.SetCTLText(edEdit.Handle, Txt); SetToolTipText(edEdit.Handle, Txt, True); SkinEngine.SetZorder(SKDialogHandle, HWND_TOPMOST); end else begin // clear edit if selected item not a path SkinEngine.SetCTLText(edEdit.Handle, ''); // change width of Combo DropList Txt := PWideChar(ExtractFileName(Txt)); GetTextBound(Txt, SkinEngine.SK_TEXTFONT, SkinEngine.SK_PUSHBUTFONTSIZE + 1, bW, bH, nil, 0); GetClientRect(hComboPath, rc); if bW > rc.Right then SendMessage(hComboPath, CB_SETDROPPEDWIDTH, bW, 0); // new DropList width Result := 1; Exit; end; end; Genauso wie der, der Combo selbst. gruss |
AW: Länge der ComboListBox items festlegen
Hmmm.. wie ich es mir dachte.
Es scheint eine Limitierung zu sein. 67 und 70 Zeichen Dialog ohne Ownerdraw. Bei 70 Zeichen ist der Eintrag in der Combo leer. Und Windows setzt nicht mal die Weite der DropDownList auf die länge des längsten string.. Wirklich schwach. gruss |
AW: Länge der ComboListBox items festlegen
.. wäre es eine Möglichkeit den Ausgabetext zu kürzen?
Aber so das man noch erkennen kann um was es bei dem Eintrag geht. Grüße Klaus |
AW: Länge der ComboListBox items festlegen
Zitat:
Wenn ich den Txt wie oben im Code erfrage dann habe ich den richtigen inklusive der länge sonst könnte ich die DropListe nicht entsprechend setzen. Im Event der Combobox jedoch schlägt die abfrage auf den Text fehl. Siehe Kommentar.
Delphi-Quellcode:
Trotzdem Danke..
case PDis^.CtlID of
ID_COMBOPATH: begin case PDis^.itemAction of ODA_DRAWENTIRE: begin if (PDis.itemAction and ODA_DRAWENTIRE) = ODA_DRAWENTIRE then begin CbTxt := OpenDialog.CBListGetText(PDis.hwndItem, PDis.itemID); // Hier ist der Text leer wenn mehr wie 67 Zeichen da ist nichts zu kürzen. GdipCheck(DrawTextToDC(PDis.HDC, CbTxt, PDis.rcItem, SkinEngine.SK_INACTIVECAPTION, SkinEngine.SK_TEXTFONT, SkinEngine.SK_PUSHBUTFONTSIZE, FontStyleBoldItalic, -1, 0, nil)); end; end; gruss |
AW: Länge der ComboListBox items festlegen
Habe die Funktion nochmals geändert..
Delphi-Quellcode:
Bei der alten hatte ich leichte Speicher Probleme.
function TSkinOpenSaveDialog.CBListGetText(hList: HWND; Item: UINT): WideString;
var Len: Integer; Buf: array[0..255] of Char; begin Result := ''; Len := SendMessage(hList, CB_GETLBTEXTLEN, Item, 0); if Len > 0 then begin ZeroMemory(@Buf[0], SizeOf(Buf)); SendMessage(hList, CB_GETLBTEXT, Item, LPARAM(@Buf)); Result := Buf; end; end; Habe noch 2 kleine Problem.. Poste es hier ![]() Meine neue Frage.. Und wie ist der Algo aufgebaut um die Einträge versetzt anzeigen zu lassen? Jemand eine Idee? Edit: Hat sich erledigt, lasse es wie es ist. :) gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 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 by Thomas Breitkreuz