![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TComboBox - не могу использовать Canvas. [D3]
TransparentGhost © (2004-07-14 10:44:00)Проблема такая : Пытаюсь перебрать все строки в TComboBox и определить наибольшую длину через TComboBox.Canvas.TextWidth(Items[Ii]). но получаю ошибку : Canvas does not drawing.
Пробовал создавать временный Canvas, но всё равно получаю ту же ошибку.
Как можно реализовать то что мне надо?
TransparentGhost (2004-07-14 12:59:00) [1]тормозимс :о)
Всё решилось.
Спасибо!!!
wicked (2004-07-14 12:01:00) [2]
> ItWidth:= Canvas.TextWidth(Items[Ii]);
а эточто такое?... у кого спросить про ширину надо?...
TransparentGhost (2004-07-14 11:58:00) [3]Вот что у меня получилось, но в итоге без изменений.
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 11:43:00) [4]способ 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%...