Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.035 c
1-1089310224
limon_
2004-07-08 22:10
2004.07.25
JPEG и масштаб


3-1088423557
Igoryok
2004-06-28 15:52
2004.07.25
Установка MSDE


4-1087052115
juiceman
2004-06-12 18:55
2004.07.25
клавиатурный шпионаж


1-1089433992
set
2004-07-10 08:33
2004.07.25
Приостановка цикла для ввода дополнительных данных


1-1089285803
Tom
2004-07-08 15:23
2004.07.25
Oсвобождение критической секции




   Наверх