Главная страница
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.008 c
15-1377241940
Павиа
2013-08-23 11:12
2014.02.09
Успешный пуск ракеты.


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


8-1234116983
Agent[007]
2009-02-08 21:16
2014.02.09
Лицензия


2-1365664373
Jord
2013-04-11 11:12
2014.02.09
sql replace странно работает


15-1377405567
Кирюха
2013-08-25 08:39
2014.02.09
Тяжело запилить свою БД?