![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возвращаясь к Tpanel .Зависает Delphi. [D6, WinXP]
max1000 © (2006-02-14 13:32:00)Создаю компонент Tpanel с Caption в левом верхнем углу ...
Но после установки на форму Делфи зависает и закрываеться подскажите ошибку.
Вот код:
unit panelA;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls,Graphics;
type
TpanelA = class(TPanel)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(Aowner:TComponent);override;
procedure paint;override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponent', [TpanelA]);
end;
{ TpanelA }
constructor TpanelA.Create(Aowner: TComponent);
begin
inherited;
Create(Aowner);
paint;
end;
procedure TpanelA.paint;
const
Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
Rect: TRect;
TopColor, BottomColor: TColor;
FontHeight: Integer;
Flags: Longint;
begin
inherited;
//with TPanelA do begin
Rect := GetClientRect;
with Canvas do
begin
Brush.Color := Color;
FillRect(Rect);
Brush.Style := bsClear;
Font := Self.Font;
FontHeight := TextHeight('W');
with Rect do
begin
Top := ((Top));
//Bottom := Top + FontHeight;
end;
Flags := DT_EXPANDTABS or DT_VCENTER;// or Alignments[FAlignment];
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Handle, PChar(Caption), -1, Rect, Flags);
end;
end;
//end;
end.
Юрий Зотов (2006-02-15 22:09:00) [1]> wal © (15.02.06 12:06) [7]
К [7] могу добавить лишь вопрос - а на фига его вообще вызывать? Inherited уже есть и больше ничего не требуется.
icWasya (2006-02-15 19:01:00) [2]wal © (15.02.06 12:06) [7]
> Но вот возник вдруг вопрос.
Вызов как конструкторапроисходит в при использовании такой синтаксической конструкции:
тип . конструктор
например
TMyClass.Create(Form2);
а в случае
переменная . конструктор, в том числе где переменная=Self, будет вызов обычной процедуры.
wal (2006-02-15 12:06:00) [3]
> [6] Юрий Зотов © (14.02.06 23:15)
Это понятно. Но вот возник вдруг вопрос. При этом вызов Create будет происходить как вызов конструктора, или как обычного метода?
Юрий Зотов (2006-02-14 23:15:00) [4]> wal
Сама по себе точка с запятой тут ни при чем. Но она привела к тому, что из конструктора вызывается тот же самый (а не унаследованный) конструктор. Естественно, возникает зацикливание и создается впечатление, что зависла Delphi.
wal (2006-02-14 14:17:00) [5]
> а мне надо что бы сразу прорисовка была.. или так нельзя?
Сразу, это когда?
Оно еще и невидимо может быть. А когда оно будет видимым, система сама скажет, что перерисовать надо, послав сообщение, и, в конце концов, вызвав paint. Если уж очень хочется, вызывай Invalidate.
С уважением.
max1000 (2006-02-14 14:15:00) [6]Парни Вери сенкс!!!!!!!! Низачто бы блин эту точку с запятой не увидел бы!!!
Все работает..Уря!!!
wal (2006-02-14 14:11:00) [7]
> constructor TpanelA.Create(Aowner: TComponent);
> begin
> inherited;
> Create(Aowner);
> paint;
> end;
Или точку с запятой убери после inherted или Create(..) убери.
И paint тоже ни к чему, он сам вызовется, когда нарисоваться нужно будет.
С уважением.
max1000 (2006-02-14 14:11:00) [8]а мне надо что бы сразу прорисовка была.. или так нельзя?
Style (2006-02-14 13:43:00) [9]constructor TpanelA.Create(Aowner: TComponent);
begin
inherited;
Create(Aowner);
paint; // ---> Это как???
end;