Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Создание компонента   Найти похожие ветки 

 
Николай   (2005-05-16 11:24) [0]

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

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 11:30) [1]

FPanel.SendToBack;

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


 
Семен Сорокин ©   (2005-05-16 11:32) [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 14:20) [3]

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.049 c
3-1130097537
redlord
2005-10-23 23:58
2005.12.11
последовательная обработка данных


2-1132248187
Leks
2005-11-17 20:23
2005.12.11
Нужно копирнуть проге саму себя


14-1131663499
chainik86
2005-11-11 01:58
2005.12.11
Где можно взять бесплатный GLScene?


1-1131962564
Дмитрий_05
2005-11-14 13:02
2005.12.11
Окно программы не высвечивается в таскбаре


14-1132301693
clickmaker
2005-11-18 11:14
2005.12.11
Киньте, плиз, ссылку на проверку орфографии для MSO 2003