Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: 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 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.049 c
14-1088965195
Интересующийся
2004-07-04 22:19
2004.07.25
DLL из EXE?


3-1088411194
homer
2004-06-28 12:26
2004.07.25
Соединение к базе


3-1088654519
Alone_Ali
2004-07-01 08:01
2004.07.25
Сортировка в Halcyon е


1-1089280529
StasN
2004-07-08 13:55
2004.07.25
Как спрятать DBComboBox список?


6-1085740049
Tr0sT
2004-05-28 14:27
2004.07.25
Отсутствие компонентов TClientSocket и TServerSocket