Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



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


15-1377368884
Необычный Порошок
2013-08-24 22:28
2014.02.09
Микропроцессор в игрушечных роботах от WowWee


15-1376546851
Пит
2013-08-15 10:07
2014.02.09
Посоветуйте книжку по 1C v8


2-1364921642
guest
2013-04-02 20:54
2014.02.09
как получить кодировку...


1-1321429584
Deltas
2011-11-16 11:46
2014.02.09
OleContainer и Excel




   Наверх