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

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

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]

"Помогите" предусматривает наличие уже какого-то написанного кода, в котором имеются затыки. Этот код есть ?


Наверх

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