Вниз
Скачать: 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.02 c
1-1089639089
Death_R
2004-07-12 17:31
2004.07.25
Запись масcива в TVarRec


1-1089701428
vlad_ri
2004-07-13 10:50
2004.07.25
Пойнтеры


14-1089031958
panov
2004-07-05 16:52
2004.07.25
Цифровой фотоаппарат.


8-1084130960
Aldor
2004-05-09 23:29
2004.07.25
Как MCI рисует на DC?


14-1088951968
Vasya.ru
2004-07-04 18:39
2004.07.25
Компы не коннектятся!




   Наверх