![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TLabel; Не рисуется T Canvas при запуске формы.
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.