![]() |
| ||
|
|
Новости |
Поиск |
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.
Спасибо за любой ответ.
JetAPI (2007-08-20 14:12:00) [1]to tmp, Raskov
Извините пожалуйста, что не смог вам ответить вчера... срочно нужно было выключить компьюетер.
to tmp
> Не расстраивайся, всё придёт, главное каждый день уделять
> внимание твоему хобби и, возможно, оно станет твоей профессией:
> -)
Знаете... даже за душу тронуло. Мне приятно стало... Для человека, кто в самом начале-начале, это очень важно. Спасибо.
> В приведёном мной примере как бы симулировался клик по Button1.
От досады, аж огорчиться хочется.... Оказыватся, чтобы понять всё, мне не хватало только одной этой строчечки. Вот только одной...
> Если тебе интересно и не лень - то найдёшь здесь очень много
> интересного:
Да что Вы?!.. Я Бобровского отстранил уже (по нему учился)....
Книги скачал, и народоваться не могу! Глаза разбегаются, не знаю скорее с чего начать читать. Так что, все впрок пошло. СПАСИБО!
> Мне кажется для автора не суть, как решить некую проблему,
> а в подходах к различным методам этих решений.
Да!.. Да!! Всё так и есть!.. Я о перехватах только от Вас услышал... здесь... впервые. Загорелся, и давай искать ответы... Но информации много, а с сутью мало (судя по Бобровскому).
Теперь Ваш вариант сохранил в отдельном файле, со всеми коментариями и пояснениями.
to Raskov
> Тяжелый случай :)
Расков, терпеливый Вы человек... Я то уж, как никто знаю, сколько Вы няньчаетесь со мной. Но честное словы, многое, что я уже поччерпнул в Делфи, то это благодоря Вам. Это начиная с модуля CommCtrl и заканчивая Handle (Дескриптор окна). Отдаю Вам должное... спасибо. Спасибо за терпение.
> Ты не у метки сообщение "ловишь", а у формы... не забывай
> это.... не оконным контролам ОС сообщений не шлет...
> Это я так .... на заметку. :)
Принял к сведенью.
> Вот сдался тебе этот Лэйбл :)
Нет... уже не нужен был... Еше по "бегущей строке" про TPointBox я принял к сведенью. Я за перехват уцепился... в будущем уже знать буду. И даже очень благодарен tmp,.. Для меня это находка была!!
> Впочем... если заглянешь в VCL и посмотришь на TCustomLabel,
> TPaintBox и наш TMyLabel то увидишь, что мы через ж....
> сделали тот же TPaintBox вот примерный получился путь:
Все... С TLabel поставил точку. Сейчас за TPaintBox берусь.... Но я уже оценил его... Еще по ранним Вашим постам понял, что оптимальный вариант для многого...
> но ... вижу ... человек хочет понять суть, а не обойти проблему.
Расков, спасибо. Терпеливый Вы человек!.. Чтобы я без Вас делал?.. Говорю Вам всё это искренне и от всего сердца!
Удачи вам! (это уже ко всем!).
{RASkov} (2007-08-20 00:02:00) [2]> перекрывать методы отрисовки - просто перехвачу сообщение
> на отрисовку и добавлю необходимое.
Если человек(например JetAPI) на этом остановится, то он так и привыкнет всегдаделать, не поняв всей сути происходящего, так как визуально это в единичном случае и не заметно будет, но это имхо... не верно.... нужно понять истину происходящего, а уж потом можно решать в каких конкретных случаях и как сделать.... я так же не против и "обманных" способов, но ... вижу ... человек хочет понять суть, а не обойти проблему.
> JetAPI
Всеж вернись на шаг назад, и повтори(закрепи) еще раз пройденный материал(это я в общем об твоем знании Делфи).... иначе дальше будет сложнее....
tmp (2007-08-19 23:53:00) [3]
> {RASkov} © (19.08.07 23:41) [38]
Мне кажется для автора не суть, как решить некую проблему, а в подходах к различным методам этих решений.
Что касается меня - то, если я использую какой-либо компонент в еденичном экземпляре - в большинстве случаев не стану создавать наследника этого компонента и перекрывать методы отрисовки - просто перехвачу сообщение на отрисовку и добавлю необходимое. Другое дело, если некий компонент используется в этом и других проектах множество раз, то да - есть смысл создать наследника с нужными свойствами.
JetAPI (2007-08-19 23:48:00) [4]Ой!.. я пока писал... Вижу ответы..
JetAPI (2007-08-19 23:46:00) [5]Leonid Troyanovsky
> Не стоит сразу дуться, я, например, вовсе не противник WM_PAINT,
>
> и сохраняй, что пожелаешь.
!00% говорю Вам... даже и мысли не было обидеться на Вас...
Я даже счастливо разолубался над этим...
Label1Second.Invalidate
Хоть что-то отвлекло...
Я единственное не могу понять, как с помощью перехвата WM_PAINT, по нажатию на Button1, перересовать Label2?
Raskov пытался меня направить на путь, но я что-то не могу ухватиться.
Допускаю, что и с Label1 я наложал и сделал, скорее всего, не то, что нужно.
(Хотя Label1 при запуске рисуется и перерисовается.)
п.с.
Читаю сейчас Бобровского.
{RASkov} (2007-08-19 23:41:00) [6]> Но если использую один раз, при запуске программы Label1
> не рисуется. Я этот момент и не могу просечь... а бросать
> не хочется...
Тяжелый случай :)
Ты неу метки сообщение "ловишь", а у формы... не забывай это.... не оконным контролам ОС сообщений не шлет...
Это я так .... на заметку. :)
Вот сдался тебе этот Лэйбл :)
Раз уж прямо-таки хочется над ним(TLabel) поиздеваться, то "верный" вариант уже был См свой пост [24]
Именно так(в конкретном случае) и ловятся сообщения (WM_PAINT) в TGraphicControl'ах, путем перекрытия его(TGraphicControl) виртуального метода Paint. А не так, что бы сообщение на прорисовку пришло в один контрол, а в методе его обработки рисуем совсем в другом контроле....
> Как нужно, чтобы 1-й Label1 рисовался по запуску программы,
> а 2-й Label1 по нажатию кнопки?
Ну с первым понятно.... создал на OnCreateForm свою метку(См TMyLabel из [24]) и выставил ей неоходимые параметры там же на создании формы (Left, Top, Parent и т.д.), а второй?? Он должен буть так же создан на момент создания формы, т.е. вместе с первым или как?
Если потом, то и создавай его так же по нажатию кнопки.....
Вот так например:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TMyLabel = class(TCustomLabel)
protected
procedure Paint; override;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
L1, L2: TMyLabel;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyLabel }
procedure TMyLabel.Paint;
begin
with Canvas do begin
Brush.Color:=clWindow;
FillRect(ClientRect);
Font.Color:=clLime;
TextOut(6,0,'01');
Font.Color:=clBlue;
TextOut(26,0,'02');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
L1:=TMyLabel.Create(self);
L1.Left:=10; L1.Top:=10;
L1.Parent:=Self; L1.Caption:='Этот текст никогда не увидим, но он задает ширину данной метки';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
L2:=TMyLabel.Create(self);
L2.Left:=10; L2.Top:=30;
L2.Parent:=Self; L2.Caption:='Этот текст никогда не увидим, но он задает ширину данной метки';
L2.Width:=100; // Явно задаем ширину
end;
end.
> Вот так нужно, чтобы 1-й Label1 рисовался по запуску программы, а 2-й Label1 по нажатию кнопки...
НО ЭТО ИЗВРАТ над "бедной" меткой :) Впочем... если заглянешь в VCL и посмотришь на TCustomLabel, TPaintBox и наш TMyLabel то увидишь, что мы через ж.... сделали тот же TPaintBox вот примерный получился путь:
TGraphicControl > TLabel;
TGraphicControl > TPaintBox;
TGraphicControl > TLabel > TMyLabel(он же TPaintBox);
:о)
ЗЫ Я рыбы наловил, а здесь все тоже самое :)
tmp (2007-08-19 23:24:00) [7]
> JetAPI © (19.08.07 17:27) [30]
> tmp
>
> > Нет. Ты не разобрался - что к чему.
>
> К своему стыду... да... Плаваю... плаваю... плаваю....
> и точно: я еще в самом-самом начале, поэтому и заципился
> за этот момент с "прорисовкой".
>
> Мне проще будет понять, если поправят ошибки... Это моя
> бедя, что я их не вижу. Внизу код, "в принципе, все делает",
> но Label2 не перерисовывает!
> Подправте пожалуйста...
> Хочу сохранить для сябя Ваш вариант... С созданием класса
> TMyLabel, с трудом с трудом, но справился. А вот с вариантом
> перехвата WM_PAINT, туго... и тупо!
> Мне нужно чтобы Label1 рисовался при запуске программы (рисуется),
> а Label2, рисовался и перерисовывался по нажатию Button1
> (рисуется но не перерисовывается).
>
> unit TLabel02_Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics,
> Controls, Forms,
> Dialogs, StdCtrls;
>
> type
> TForm1 = class(TForm)
> Label1: TLabel;
> Button1: TButton;
> Label2: TLabel;
> procedure Button1Click(Sender: TObject);
> private
> { Private declarations }
> procedure WMPaint(var MsgPaint: TWMPaint); message WM_PAINT;
>
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
> {$R *.dfm}
>
> procedure TForm1.WMPaint(var MsgPaint: TWMPaint);
> begin
> inherited;
> 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,'01');
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> Label2.Width:=150;
> Label2.AutoSize:=False;
> Label2.Canvas.Brush.Color:=clWindow;
> Label2.Canvas.FillRect(clientrect);
> Label2.Canvas.Font.Color:=clLime;
> Label2.Canvas.TextOut(6,0,'02');
> Label2.Canvas.Font.Color:=clBlue;
> Label2.Canvas.TextOut(26,0,'02');
> end;
>
> end.
Не расстраивайся, всё придёт, главное каждый день уделять внимание твоему хобби и, возможно, оно станет твоей профессией:-)
Но постарайся быть собранным - ты невнимателен.
В приведёном мной примере как бы симулировался клик по Button1.
Сравни твой код, который курсивом и тотже, но ...
unit TLabel02_Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure WMPaint(var MsgPaint: TWMPaint); message WM_PAINT;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMPaint(var MsgPaint: TWMPaint);
begin
inherited;
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,'01');
Button1Click(self);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Width:=150;
Label2.AutoSize:=False;
Label2.Canvas.Brush.Color:=clWindow;
Label2.Canvas.FillRect(clientrect);
Label2.Canvas.Font.Color:=clLime;
Label2.Canvas.TextOut(6,0,'02');
Label2.Canvas.Font.Color:=clBlue;
Label2.Canvas.TextOut(26,0,'02');
end;
end.
Если тебе интересно и не лень - то найдёшь здесь очень много интересного:
http://www.podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/D5/Delphi5vol1.pdf&file_id=Delphi5vol1
http://www.podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/D5/Delphi5vol2.pdf&file_id=Delphi5vol2
Это в частности, а вобще вот: http://www.podgoretsky.com/ddp.html
Да, да - это тот самый Анатолий Подгорецкий :-)
Leonid Troyanovsky (2007-08-19 22:51:00) [8]
> JetAPI © (19.08.07 22:39) [35]
> Вот и всё... Теперь отставлю...
Не стоит сразу дуться, я, например, вовсе не противник WM_PAINT,
и сохраняй, что пожелаешь.
--
Regards, LVT.
JetAPI (2007-08-19 22:39:00) [9]Leonid Troyanovsky
> > Сейчас читаю.... Но с Вашеим вариантом справился ж...
> :)!
>
> Чисто мыслительным усилием? :)
> Я-то ж старался сущности не умножать.
Я думал Вам будет приятно, что Ваш совет и подсказка нашли место быть и у меня всё получилось.
Конечно... я больше не буду лезть с распросами и докучать. Просто, меня заинтересовали уже не TLabel и перерисовка, а перехват WM_PAINT.
Я хотел этот вариант сохранить у себя, именно для этой цели... как пример...
Вот и всё... Теперь отставлю...
Leonid Troyanovsky (2007-08-19 19:16:00) [10]
> JetAPI © (19.08.07 18:53) [33]
> Сейчас читаю.... Но с Вашеим вариантом справился ж... :)!
Чисто мыслительным усилием? :)
Я-то ж старался сущности не умножать.
--
Regards, LVT.
JetAPI (2007-08-19 18:53:00) [11]Сейчас читаю.... Но с Вашеим вариантом справился ж... :)!
Leonid Troyanovsky (2007-08-19 18:41:00) [12]
> JetAPI © (19.08.07 17:44) [31]
> а 2-й Label1 по нажатию кнопки?
procedure TForm2.Button1Click(Sender: TObject);
begin
Label1Second.Invalidate
end;
Неужель, книжечку не хочется почитать?
--
Regards, LVT.
JetAPI (2007-08-19 17:44:00) [13]Raskov
> > Сейчас вариант от tmp буду юзать... Не могу никак откомпилировать.
> Это ты про [19]? Я же тебе написал где у тебя ошибка....
> причем глупая :)
Два раза использовал WMPaint.... понятно... Но если использую один раз, при запуске программы Label1 не рисуется. Я этот момент и не могу просечь... а бросать не хочется... столько Вы все вложили меня!
Если можно и не затруднит, поправьте рукой... что делаю не так?
Как нужно, чтобы 1-й Label1 рисовался по запуску программы, а 2-й Label1 по нажатию кнопки?
Честное слово... обидно!
JetAPI (2007-08-19 17:27:00) [14]tmp
> Нет. Ты не разобрался - что к чему.
К своему стыду... да... Плаваю... плаваю... плаваю.... и точно: я еще в самом-самом начале, поэтому и заципился за этот момент с "прорисовкой".
Мне проще будет понять, если поправят ошибки... Это моя бедя, что я их не вижу. Внизу код, "в принципе, все делает", но Label2 не перерисовывает!
Подправте пожалуйста...
Хочу сохранить для сябя Ваш вариант... С созданием класса TMyLabel, с трудом с трудом, но справился. А вот с вариантом перехвата WM_PAINT, туго... и тупо!
Мне нужно чтобы Label1 рисовался при запуске программы (рисуется), а Label2, рисовался и перерисовывался по нажатию Button1 (рисуется но не перерисовывается).
unit TLabel02_Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure WMPaint(var MsgPaint: TWMPaint); message WM_PAINT;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMPaint(var MsgPaint: TWMPaint);
begin
inherited;
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,'01');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Width:=150;
Label2.AutoSize:=False;
Label2.Canvas.Brush.Color:=clWindow;
Label2.Canvas.FillRect(clientrect);
Label2.Canvas.Font.Color:=clLime;
Label2.Canvas.TextOut(6,0,'02');
Label2.Canvas.Font.Color:=clBlue;
Label2.Canvas.TextOut(26,0,'02');
end;
end.
{RASkov} (2007-08-18 18:29:00) [15]> [28] tmp (18.08.07 18:21)
> А вобще, чем тебе не нравится Button1Click(self)?
> В методе прорисовки, лучше не менять ничего не касающего TPen, TBrush, TFont....
Впрочем.... ладно... согласен с
> Да я не ставлю никого и никуда:-) Есть вопрос и также есть на него ответ.
ЗЫ Все.....я уехал на рыбалку.... приеду гляну что здесь получилось :)
tmp (2007-08-18 18:21:00) [16]Да я не ставлю никого и никуда:-) Есть вопрос и также есть на него ответ.
Я так понимаю, что он в самом-мамом начале, поэтому нет ничего страшного испытать - какие есть вобще возможности для того или иного. А всё остальное приложится.
А вобще, чем тебе не нравится Button1Click(self)?
{RASkov} (2007-08-18 18:13:00) [17]> [25] tmp (18.08.07 18:01)
> Ага. Попробуй сначала. Дело в том, что сначала прорисовывается
Да пробывал... и знаю разницу того что предложил в [22] и твой способ.... и вообщем-то я про это и рассказывал... автору...
Тем более это не есть хороший способ что [8] что [22]...
А вот это:
> procedure TForm1.WMPaint(var MsgPaint: TWMPaint);
> begin
> inherited;
> 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');
>
> Button1Click(self);
> end;
Имхо.... тоже изврат.... :)
Вообщем не на ту дорогу автора ставишь....
{RASkov} (2007-08-18 18:04:00) [18]> to Raskov про TPaintBox, помню...
> А можно его упростить?..
Конечно можно... См TPaintBox ;)
А вот это(жирное) не обязательно:
> procedure TMyLabel.Paint;
> begin
> inherited; < Зачем рисовать сначала предком...
> {Canvas.Brush.Style := bsClear;}
> Canvas.Brush.Color:=clWindow;
> Canvas.FillRect(clientrect); < .....потом все это стирать
> Canvas.Font.Color:=clLime; < .... переопределяем парметры
> Canvas.TextOut(6,0,'01');
> Canvas.Font.Color:=clBlue;
> Canvas.TextOut(26,0,'02'); < ... и "рисуем" заного
> end;
Только, ты этим самым добился тогоже самого, что я тебе который раз уже твержу про паинт....
Ты же затираешь все, что рисовалось в методе Paint TLabel'а... и используешь его канву в своем назначении....
Посмотри: TLabel и TPaintBox (стандартные) не долеко друг от друга ушли, и не так долеко от их общего предка TGraphicControl...
По сему никчему издеваться над TLabel'ом :)
Ты пример из [4] пробывал? Удачи.
> Сейчас вариант от tmp буду юзать... Не могу никак откомпилировать.
Это ты про [19]? Я же тебе написал где у тебя ошибка.... причем глупая :)
tmp (2007-08-18 18:01:00) [19]
> {RASkov} © (18.08.07 15:03) [18]
> > > procedure TForm1.WMPaint(var MsgPaint: TWMPaint);
> > > begin
> > > inherited; - // первый раз
> > > Label1.Width:=150;
> > > Label1.AutoSize:=False;
>
> Да еще и размеры менять в этом методе..... не серьезно..
> ..
> Я понимаю, что это было для примера, но..... нужно и это
> учесть. В методе прорисовки, лучше не менять ничего не касающего
> TPen, TBrush, TFont....
Хи-хи. Я просто скопировал текст из сабжа. Главное ведь не в этом? :-)
> {RASkov} © (18.08.07 15:24) [22]
> Все что в [8] и у тебя в [19] - это и есть метод OnPaint
> у формы :)
>
> Можно было и проще:
>
> procedure TForm1.Paint();
> 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;
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> Invalidate;
> end;
> :o)
Ага. Попробуй сначала. Дело в том, что сначала прорисовывается форма и уже только после этого прорисовываются элементы, находящиеся на этой форме, ну и, разумеется, в этом случае, если методы Paint данных элементов не перекрыты - вызываются стандартные. А стандартный метод Paint в TLabel выводит содержание Caption на Canvas. Поэтому или перекрывать Paint, или перехватывать событие WM_PAINT.
> JetAPI © (18.08.07 17:39) [24]
> Сейчас вариант от tmp буду юзать... Не могу никак откомпилировать.
Нет. Ты не разобрался - что к чему.
Реализация процедуры должна быть только один раз:-)
procedure TForm1.WMPaint(var MsgPaint: TWMPaint);
begin
inherited;
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');
Button1Click(self);
end;
JetAPI (2007-08-18 17:39:00) [20]Фу-уууу!.. Я тако-ой урок получил!.. что просто вообще-е!..
Все сделал... Все получается... Все работает....
Главное понял!
Leonid Troyanovsky, tmp , RASkov, спасибо всем Вам за терпение и помощь!
Вот рабочий код:
(При запуске появляются 2 MyLabel; при нажатии на кнопку MyLabel3.)
unit TLabel_Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyLabel = class(TCustomLabel)
protected
procedure Paint; override;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MyLabel1: TMyLabel;
MyLabel2: TMyLabel;
MyLabel3: TMyLabel;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyLabel.Paint;
begin
inherited;
{Canvas.Brush.Style := bsClear;}
Canvas.Brush.Color:=clWindow;
Canvas.FillRect(clientrect);
Canvas.Font.Color:=clLime;
Canvas.TextOut(6,0,'01');
Canvas.Font.Color:=clBlue;
Canvas.TextOut(26,0,'02');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyLabel3:=TMyLabel.Create(Self);
MyLabel3.Parent:=Self;
MyLabel3.Left:=20;
MyLabel3.Top:=80;
MyLabel3.Caption:='MyLabe3';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyLabel1:=TMyLabel.Create(Self);
MyLabel1.Parent:=Self;
MyLabel1.Left:=20;
MyLabel1.Top:=20;
MyLabel1.Caption:='MyLabel';
MyLabel2:=TMyLabel.Create(Self);
MyLabel2.Parent:= Self;
MyLabel2.Left:=20;
MyLabel2.Top:=50;
MyLabel2.Caption := 'MyLabe2';
{ SetBounds(0, 0, 50, 20);}
end;
end.
п.с.
А можно его упростить?..
Мне все равно кажется, что сделал что-то не так... Посмотрите пожалуйста, если не затруднит.
to Raskovпро TPaintBox, помню... Он на подходе... Я его уже прробовал. Не хотел просто перед TLabel пасовать.
Сейчас вариант от tmpбуду юзать... Не могу никак откомпилировать.