Вниз
Скачать: CL | DM;

TLabel + Paint + Align   Найти похожие ветки 

← →
mokmoc   (2008-08-03 17:41) [0]

Есть собственный наследник TLabel, в котором перекрыта процедура Paint, в которой я дополнительно делаю необходимую отрисовку. Все работает отлично, но я заметил, что как только я у своего TMyLabel изменю положение Align на любое значение кроме None, так сразу начинает весь TMyLabel и прочие контроллы на форме тоже.

В чем может быть проблема?


← →
{RASkov} ©   (2008-08-03 17:50) [1]

Что начинают-то?)

> В чем может быть проблема?

В неправильном коде.


← →
mokmoc   (2008-08-03 17:56) [2]

Вот код:
procedure TMyLabel.Paint;
var
 X, X1: Integer;
begin
 inherited;
 if FPseudoWeb then
   with Canvas, ClientRect do
   begin
     Pen.Style := psSolid;
     Pen.Color := clBlue;
     Height := TextHeight(Caption) + 2;
     X := Left + TextWidth(Caption);
     X1 := Left;
     while X >= X1 do
     begin
       Canvas.Pixels[X1, Top + TextHeight(Caption)] := $00FD407D;
       Inc(X1, 2);
     end;
   end;
end;


← →
Правильный$Вася   (2008-08-03 17:59) [3]


>  так сразу начинает весь TMyLabel и прочие контроллы на
> форме тоже.

так чево начинает?

> with Canvas, ClientRect do

грозит трудноуловимыми багами


← →
mokmoc   (2008-08-03 18:01) [4]

"Мигать" они начинают. Как будто я что-то каждую секунду отрисовываю.


← →
mokmoc   (2008-08-03 18:03) [5]

Вот код без ClientRect, ибо я забыл убрать некоторые не нужности.
procedure TMyLabel.Paint;
var
 X, X1: Integer;
begin
 inherited;
 if FPseudoWeb then
   with Canvas do
   begin
     Height := TextHeight(Caption) + 2;
     X := Left + TextWidth(Caption);
     X1 := Left;
     while X >= X1 do
     begin
       Canvas.Pixels[X1, Top + TextHeight(Caption)] := $00FD407D;
       Inc(X1, 2);
     end;
   end;
end;


← →
{RASkov} ©   (2008-08-03 18:07) [6]

А зачем в методе Paint менять размеры класса/компонента(TMyLabel)?


← →
Anatoly Podgoretsky ©   (2008-08-03 18:08) [7]

Какие секунды, каждый пиксель отрисовываешь
Canvas.Pixels


← →
{RASkov} ©   (2008-08-03 18:09) [8]

> [5] mokmoc   (03.08.08 18:03)
> Height := TextHeight(Caption) + 2;

И теперь думай, что будет при Align отличном от None в методе паинт....


← →
mokmoc   (2008-08-03 18:10) [9]


> {RASkov} ©   (03.08.08 18:07) [6]

Да, это моя ошибка. Убрал это заработало все как надо.
--
Я хотел рисовать ниже по высоте (а AutoSize автоматически устанавливал размер). Поэтому я принудительно увеличивал высоту. Теперь это мне не надо.



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

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



Память: 0.47 MB
Время: 0.015 c
15-1216894108
Кактус
2008-07-24 14:08
2008.09.14
SQL


2-1216308535
Дмитрий Белькевич
2008-07-17 19:28
2008.09.14
Окно - прогресс в отдельном потоке


2-1217753286
fokas
2008-08-03 12:48
2008.09.14
аналог TreeView без скролов + ScrollBar


3-1205998904
denmin
2008-03-20 10:41
2008.09.14
Не постятся данные в PostgreSQL.


3-1205492132
LoDr
2008-03-14 13:55
2008.09.14
Firebird, узнать имя сервера




   Наверх