Форум: "Начинающим";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];
ВнизКак правильно реализовать 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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.071 c