Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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%...


Наверх

Титульная страница Поиск, карта сайта Написать письмо