Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизTComboBox - не могу использовать Canvas. Найти похожие ветки
← →
TransparentGhost (2004-07-14 10:44) [0]Проблема такая : Пытаюсь перебрать все строки в TComboBox и определить наибольшую длину через TComboBox.Canvas.TextWidth(Items[Ii]). но получаю ошибку : Canvas does not drawing.
Пробовал создавать временный Canvas, но всё равно получаю ту же ошибку.
Как можно реализовать то что мне надо?
← →
wicked © (2004-07-14 11:43) [1]способ per rectum:
var dc: HDC;
cbCanvas: TCanvas;
begin
.....
// где то там создали канвас
.....
dc := GetDC(ComboBox.Handle);
try
cbCanvas.Handle := dc;
// выполняем свой страшный перебор по items"ам комбобокса
// но спрашиваем длину у cbCanvas
finally
cbCanvas.Handle := 0;
ReleaseDC(ComboBox.Handle, dc);
cbCanvas.Free; // опционально...
end;
end;
а вообще то, если подумать, то в 99% случаев строка с наибольшей длиной и будет длиннее всех в пикселах.... поэтому нужно найти самую длинную строку и измерить её... для страховки добавить еще к пиксельной длине 20%...
← →
TransparentGhost (2004-07-14 11:58) [2]Вот что у меня получилось, но в итоге без изменений.
Procedure TADQComboBox.SetDropDownWidthAuto;
Var
Ii:Word;
CnvWidth:Word;
ItWidth:Word;
TmpCnv:TCanvas;
DC:HDC;
Begin
CnvWidth:=Width;
TmpCnv:=TCanvas.Create;
DC:=GetDC(Handle);
Try
TmpCnv.Handle:=DC;
TmpCnv.Font:=Font;
For Ii:=0 to Items.Count-1 do
Begin
ItWidth:=Canvas.TextWidth(Items[Ii]);
If ItWidth>CnvWidth then
CnvWidth:=ItWidth;
End;
Finally
TmpCnv.Handle:=0;
ReleaseDC(Handle,DC);
TmpCnv.Destroy;
End;
SetDropDownWidth(CnvWidth);
End;
← →
wicked © (2004-07-14 12:01) [3]
> ItWidth:=Canvas.TextWidth(Items[Ii]);
а это что такое?... у кого спросить про ширину надо?...
← →
TransparentGhost (2004-07-14 12:59) [4]тормозимс :о)
Всё решилось.
Спасибо!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c