Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.02.09;
Скачать: CL | DM;

Вниз

Как правильно реализовать AutoSize?   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2013-04-03 23:44) [0]

Пишу наследника от TCustomControl: рисует древовидную структуру с доп. данными. Добился корректной отрисовки при AutoSize = False.

Если установить AutoSize в True, после запуска приложения размеры контрола оказываются нулевыми. Соответственно метод Paint никогда не вызывается — всё. Попробовал делать SetBounds(). В конструкторе — рано, в переопределённом методе Loaded — видимо, тоже.

Полистал исходники VCL, реализацию TImage, TCustomEdit… Ответа не нашёл: слишком много приходится прыгать по методам.

Подскажите, пожалуйста, как правильно реализовать поддержку AutoSize в своём контроле?


 
clickmaker ©   (2013-04-04 00:17) [1]

наверно, по аналогии. Где вместо Picture.Width/Height размеры твоей древовидной структуры

function TImage.CanAutoSize(var NewWidth, NewHeight: Integer): Boolean;
begin
 Result := True;
 if not (csDesigning in ComponentState) or (Picture.Width > 0) and
   (Picture.Height > 0) then
 begin
   if Align in [alNone, alLeft, alRight] then
     NewWidth := Picture.Width;
   if Align in [alNone, alTop, alBottom] then
     NewHeight := Picture.Height;
 end;
end;


 
ProgRAMmer Dimonych ©   (2013-04-04 00:45) [2]

> [1] clickmaker ©   (04.04.13 00:17)

Эм-м-м, пробовал в процессе поиска — не помогло. Сейчас добавил — сработало. Отличие, видимо, в том, что сделал, как и в TImage, отдельный метод, который вызывается каждый раз, когда изменяется картинка.

Спасибо.

---

Если кто-нибудь вдруг будет искать, примерно такого содержания:


procedure TMyTree.TreeChanged;
begin
  PreCalcSize; // Рассчитывает координаты узлов, помещает желательные размеры в FReqWidth и FReqHeight
  if AutoSize then
    SetBounds(Left, Top, FReqWidth, FReqHeight);
  if not FDrawing then Invalidate;
end;


По образу и подобию TImage.PictureChanged. CanAutoSize тоже по образу и подобию: ширину-высоту картинки заменил на свои.



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.006 c
15-1377522246
Псевдо-Дельфи-Мастер.
2013-08-26 17:04
2014.02.09
Книги по STALKER у.


15-1377069296
Els
2013-08-21 11:14
2014.02.09
Хороший форум по программированию


2-1364804378
dmitry87
2013-04-01 12:19
2014.02.09
работа с sqlite в xe3


2-1365109635
noname_06
2013-04-05 01:07
2014.02.09
Ищу примеры использования Сhromium Еmbedded Framework


2-1364812253
dronchik
2013-04-01 14:30
2014.02.09
Как обратиться к объекту в цикле