![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание компонента [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 вообще не порождать?