![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TShape & TLabel [D6, Win95/98]
Ukraine © (2002-10-22 16:38:00)Добрый день!
Помогите написать компонент, совмещающий сабж. Очень надо!
Заранее благодарен
Ukraine (2002-10-22 17:24:00) [1]>Игорь Шевченко © (22.10.02 17:19)
Ну хотелось бы Label... чтобы тебе и шрифт выбрать можно и.т.д.
Хотя сейчас попробуем и так.
>Демонов Е.В. © (22.10.02 17:15)
Щас попробуем...
Игорь Шевченко (2002-10-22 17:19:00) [2]Ukraine (22.10.02 17:09)
Глупый вопрос: А нужен ли Label вообще, если уже есть свойство Caption. Может, выводить этот Caption на канве самого Shape функцией DrawTextEx (Canvas.Handle, PChar(Caption), Length(Caption), ARect, ...) ?
Демонов Е.В. (2002-10-22 17:15:00) [3]type
TShapeText = class(TShape)
private
FLabel:tLabel;
public
constructor create(Aowner:нипомнючто);override;
destuctor destroy;override;
publiched
property Label:tLabel read FLabel;
end;
constructor create(Aowner:нипомнючто);override;
begin
inherited;
FLabel:=TLabel.create(Self);
....чего то ещё делаем;
end;
destuctor destroy;override;
begin
FLabel.free;
inherited;
end;
Ukraine (2002-10-22 17:09:00) [4]> Игорь Шевченко © (22.10.02 16:56)
Да я и сам запутался :-(
В принципе использовать OnUserDraw то и не надо...
Я его использовал, т.к. не знаю как совместить сабж...
А как сделать чтобы по
var ShapeText1: TShapeText;
...
ShapeText1:=TShapeText.Create(Self);
ShapeText1.Parent:=Self;
ShapeText1.Caption:="Hello";
ShapeText1.Left:=100;
ShapeText1.Top:=100;
создавался этот Shape вместе с Label?
Как???
Игорь Шевченко (2002-10-22 16:56:00) [5]Не совсем понятно, что в итоге должно получиться. Точнее, совсем непонятно. Если событие ShapeText1UserDraw определяется, как метод формы, то кто мешает создать на этой же форме Label1 ?
Skier (2002-10-22 16:55:00) [6]>Ukraine
//Текст, который нужно выводить вместе с Shape
property Caption : string read FCaption write FCaption;
Ну так и рисуй его на канве.
B методе TShapeText.Paint.
Ukraine (2002-10-22 16:53:00) [7]unit ShapeText;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;
type
TOnUserDraw = procedure(Sender:TObject) of object;
type
TShapeText = class(TShape)
private
{ Private declarations }
FOnUserDraw : TOnUserDraw;
FCaption : string;
procedure SetOnUserDraw(const Value:TOnUserDraw);
procedure DoUserDraw;
protected
{ Protected declarations }
procedure Paint; override;
public
{ Public declarations }
published
{ Published declarations }
//Текст, который нужно выводить вместе с Shape
property Caption : string read FCaption write FCaption;
//Придется самому потом рисовать :-(
property OnUserDraw : TOnUserDraw read FOnUserDraw write SetOnUserDraw;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Samples", [TShapeText]);
end;
{ TShapeText }
procedure TShapeText.DoUserDraw;
begin
if assigned(FOnUserDraw) then FOnUserDraw(Self);
end;
procedure TShapeText.Paint;
begin
inherited;
DoUserDraw;
end;
procedure TShapeText.SetOnUserDraw(const Value: TOnUserDraw);
begin
FOnUserDraw:=Value;
end;
end.
А потом в проге:
procedure TForm1.ShapeText1UserDraw(Sender: TObject);
begin
with (Sender as TShapeText) do
begin
Label1.Left:=Left+Width;
Label1.Top:=Top;
Label1.Caption:=Caption;
end;
end;
Но в этом случае нужно уже созланный Label. А как все совместить?
Игорь Шевченко (2002-10-22 16:46:00) [8]"Помогите" предусматривает наличие уже какого-то написанного кода, в котором имеются затыки. Этот код есть ?