| 
| 
 | Вопрос # 5 079/ вопрос открыт / | 
 |  Добрый день, прошу помощи по созданию компонента.Необходим компонент Shape, а над ним Label. И чтобы впоследствии эта конструкция при перемещении Shape по форме двигалась синхронно. Переделал код из LabelEdit (просто заменил Edit на Shape), с LabelEdit перетаскивания работают отлично.
 В моем компоненте при установке компонента LabelShape на форме появляется и Shape и Label, но отдельно (т.е. Label в левом верхнем углу), и при перемещении  Shape не двигается Label. В чем ошибка ?
 Заранее спасибо.
 Приложение:Переключить в обычный режим unit Lbshape; interface usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls, ExtCtrls; typeTLabelShape = class(TShape)private   FLabel: TLabel;   procedure WMMove(var Msg: TWMMove); message WM_MOVE;protected   procedure SetParent(Value: TWinControl); override;   function GetLabelCaption: string; virtual;   procedure SetLabelCaption(const Value: string); virtual;public   constructor Create(AOwner: TComponent); override;   destructor Destroy; override;published   property LabelCaption: string read GetLabelCaption write     SetLabelCaption; end; procedure Register; implementation constructor TLabelShape.Create(AOwner: TComponent); begininherited Create(AOwner);  FLabel := TLabel.Create(nil);FLabel.Caption := 'Edit label';end; procedure TLabelShape.SetParent(Value: TWinControl); begin if (Owner = nil) or not (csDestroying in Owner.ComponentState) then   FLabel.Parent := Value;inherited SetParent(Value);end; destructor TLabelShape.Destroy; beginif (FLabel <> nil) and (FLabel.Parent = nil) then   FLabel.Free;inherited Destroy;end; function TLabelShape.GetLabelCaption: string; beginResult := FLabel.Caption;end; procedure TLabelShape.SetLabelCaption(const Value: string); beginFLabel.Caption := Value;end; procedure TLabelShape.WMMove(var Msg: TWMMove); begininherited;  if FLabel <> nil then   with FLabel do     SetBounds(Msg.XPos, Msg.YPos - Height, Width, Height);end; procedure Register;beginRegisterComponents('MyComponents', [TLabelShape]);end; initialization  RegisterClass(TLabel);end. 
|  |   Вопрос задал: Snitus (статус: Посетитель)Вопрос отправлен: 10 марта 2011, 20:42
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Ну, вроде набросал я тебе компонентик. Прицепляю к ответу вместе с программой тестирования.Если чо не так - доработай напильником сам.
 Ахтунг! Отлаживал в run-time, в палитру НЕ СТАВИЛ!
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 11 марта 2011, 09:55
 
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 12 марта 2011, 09:09; участников в обсуждении: 2. 
|   | min@y™ (статус: Доктор наук), 10 марта 2011, 20:52 [#1]:Не нужен тебе Label на TShape. Если нужна надпись на TShape, напиши его наследник, в котором перекрой (override) метод Paint и рисуй нужную надпись. Можно (нужно) добавить такие свойства, как Caption, Font, Alignment, Layout и т.д. Сам справишься или помочь?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Snitus (статус: Посетитель), 10 марта 2011, 22:20 [#2]:От помощи не откажусь. В написании компонент совсем слабоват. |  
|   | min@y™ (статус: Доктор наук), 11 марта 2011, 09:07 [#3]: Цитата (Snitus): От помощи не откажусь. В написании компонент совсем слабоват.  Ну чо, я пришёл на работу и сел писать компонент.
 Самому интересно.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Snitus (статус: Посетитель), 11 марта 2011, 20:50 [#4]:Спасибо ! Первое впечатление очень хорошее. Последовав вашим вчерашним советам сам с утра на работе создал компонент, что то даже получилось. Ну а с помощью вашего кода создам то, что нужно.
 |  
|   | min@y™ (статус: Доктор наук), 12 марта 2011, 09:09 [#5]: Цитата (Snitus): Спасибо ! И это всё? Знал бы - даже не начинал бы писать.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |