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

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

Создание компонента [D7]


Николай ©   (2005-05-16 11:24:00) 

Помогите пожалуйста даработать этот компонент
При устаноке его на форму всё нормально, но другие компоненты становяться невидимыми как это исправить.

unit MyMenuClockDate;

interface

uses
 SysUtils,Menus,Classes,
 Controls,ExtCtrls,ComCtrls,Forms,Graphics;

type
 TMyMenuClockDate = class(TMainMenu)
 private
   FTimer: TTimer;
   FStatusBar:TStatusBar;
   FPanel:TPanel;
   procedure TimerExpired(Sender: TObject);
   procedure MyHint(Sender: TObject);
   procedure CreateStatuspanel();
 protected
 public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
 published
 end;
procedure Register;

implementation

constructor TMyMenuClockDate.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
 FTimer := TTimer.Create(Self);
 FTimer.Interval := 1000;
 FTimer.OnTimer := TimerExpired;
 CreateStatuspanel();
end;

destructor TMyMenuClockDate.Destroy;
begin
 inherited Destroy;
end;

procedure TMyMenuClockDate.CreateStatuspanel();
function WidthText(Text:String):Integer;
var
 Bm:TBitmap;
begin
 try
  Result:=0;
  Bm:=TBitmap.Create();
  Result:=Bm.Canvas.TextWidth(Text);
 finally
  Bm.Free;
 end;
end;
begin
 Application.OnHint := MyHint;
 FPanel:=TPanel.Create(Self);
 FPanel.Caption:='';
 FPanel.Align:=alClient;
 FPanel.BevelInner:=bvLowered;
 FPanel.Parent:=TForm(Owner);
 FStatusBar:=TStatusBar.Create(Self);
 FStatusBar.ControlStyle := FStatusBar.ControlStyle + [csAcceptsControls];
 FStatusBar.Panels.Add;
 FStatusBar.Panels[0].Width:=6+WidthText(TimeToStr(Time));
 FStatusBar.Panels[0].Text:=TimeToStr(Time);
 FStatusBar.Panels.Add;
 FStatusBar.Panels[1].Width:=9+WidthText(FormatDateTime('dd mmmm yyyyy ã.',Date));
 FStatusBar.Panels[1].Text:=FormatDateTime('dd mmmm yyyyy ã.',Date);
 FStatusBar.Panels.Add;
 FStatusBar.Parent:=FPanel;
end;

procedure TMyMenuClockDate.TimerExpired(Sender: TObject);
begin
 FStatusBar.Panels[0].Text:=TimeToStr(Time);
 FStatusBar.Panels[1].Text:=FormatDateTime('dd mmmm yyyyy ã.',Date);
end;

procedure TMyMenuClockDate.MyHint(Sender: TObject);
begin
FStatusBar.Panels[2].Text:=Application.Hint;
end;

procedure Register;
begin
 RegisterComponents('MyComponent', [TMyMenuClockDate]);
end;

end.


Юрий Зотов   (2005-05-16 14:20:00) [1]

Даже FPanel.SendToBack не поможет - графические контролы на том же Parent'е панель все равно закроет.

Зачем нужна панель - действительно, непонятно.


Семен Сорокин   (2005-05-16 11:32:00) [2]

другие компоненты невидимы из-за вот этого:
FPanel:=TPanel.Create(Self);
FPanel.Caption:='';
FPanel.Align:=alClient;
FPanel.BevelInner:=bvLowered;
FPanel.Parent:=TForm(Owner);
и вообще зачем нцжна эта панель? из кода не ясно...

ну а функция
function WidthText(Text:String):Integer;
вообще шедевр


ЮЮ   (2005-05-16 11:30:00) [3]

FPanel.SendToBack;

А может лучше по-человечески? FStatusBar класть на форму, а FPanel вообще не порождать?


Наверх

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