Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TLabel; Не рисуется T Canvas при запуске формы.


Страницы:   1 2 3

JetAPI ©   (2007-08-17 21:48:00) 

Здравствуйте всем.
Помогите пожалуйста понять: почему, при запуске программы, в TLabel, не работает TCanvas? Что нужно сделать?.. Никак не могу понять?
Если сделать в обработчичике OnClick (кнопки), то все рисуется. А вот при запуске, этого не происходит.
Вот код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Label1: TLabel;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Width:=150;
Label1.AutoSize:=False;
Label1.Canvas.Brush.Color:=clWindow;
Label1.Canvas.FillRect(clientrect);
Label1.Canvas.Font.Color:=clLime;
Label1.Canvas.TextOut(6,0,'01');
Label1.Canvas.Font.Color:=clBlue;
Label1.Canvas.TextOut(26,0,'02');
end;

end.

Спасибо за любой ответ.


{RASkov}   (2007-08-18 03:18:00) [41]

> [2] JetAPI ©   (17.08.07 23:08)
> Пробовал вот так...
> Label1.Canvas.TextOut( 26,50,'02');
> Но так не получается... Голова кругом идет, а я даже близко подойти не могу, чтобы научиться рисовать на лейбле.

А у тебя хватает размеров Лэйблы для вывода функцией TextOut? )

В общем ты наверное не понимаешь, что такое канва и как происходит на нее вывод... Я может тоже не совсем правильно понимаю, но скорее не смогу правильно объяснить...
Вот смотри, твой пример.
Окно получило сообщение на перерисовку... оно перерисовалось и нарисовало на канве метки - '02', (пусть будет так - Label1.Canvas.TextOut( 0, 0,'02'); - это все в твоем примере из [2]), но следом перерисовалась сама метка(У нее тоже есть Paint) вот оно и затерло "твое художество"...

А с методом TForm1.FormCreate из [1]...., не понял еще? :)
Так вот там ты нарисовал "это дело" на канве, пусть даже на форме... да на любой, а что происходит потом.... потом идет вызов еще кучи методов, такие как например OnResize, OnActivate, OnShow.... и последним OnPaint... т.е. хоть у тебя в [1] и не было ничего в этом(OnPaint) обработчике, но окно получило команду перерисоваться и ему(окну) пофик что ты рисовал на его создании.... ведь рисунок на канве нигде не храниться.... все что мы видим все перерисовывается....

И в заключении..... зачем использовать TLabel если нам нужна канва на которой мы хотим что-то рисовать??? А TPaintBox чем не устроил?
Нужен пример?


JetAPI   (2007-08-17 23:08:00) [42]

Leonid Troyanovsky, да, так рисуется.... все получается...
Но в том то и дело, мне нужно вывести именно на TLabel.
Пробовал вот так...

procedure TForm1.FormPaint(Sender: TObject);
begin
Label1.Canvas.Font.Color:=clBlue;
Label1.Canvas.TextOut(26,50,'02');
end;

Но так не получается... Голова кругом идет, а я даже близко подойти не могу, чтобы научиться рисовать на лейбле.

Можно еще что-нибудь посоветовать?


Leonid Troyanovsky   (2007-08-17 22:04:00) [43]


> JetAPI ©   (17.08.07 21:48)  

> Спасибо за любой ответ.


procedure TForm1.FormPaint(Sender: TObject); // OnPaint
begin
 Canvas.Font.Color:=clBlue;
 Canvas.TextOut(26,0,'02');
end;

--
Regards, LVT.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо