Форум: "Компоненты";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизВозвращаясь к Tpanel .Зависает Delphi. Найти похожие ветки
← →
max1000 (2006-02-14 13:32) [0]Создаю компонент 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.
← →
Style © (2006-02-14 13:43) [1]constructor TpanelA.Create(Aowner: TComponent);
begin
inherited;
Create(Aowner);
paint; // ---> Это как???
end;
← →
wal © (2006-02-14 14:11) [2]
> constructor TpanelA.Create(Aowner: TComponent);
> begin
> inherited;
> Create(Aowner);
> paint;
> end;
Или точку с запятой убери после inherted или Create(..) убери.
И paint тоже ни к чему, он сам вызовется, когда нарисоваться нужно будет.
С уважением.
← →
max1000 (2006-02-14 14:11) [3]а мне надо что бы сразу прорисовка была.. или так нельзя?
← →
max1000 (2006-02-14 14:15) [4]Парни Вери сенкс!!!!!!!! Низачто бы блин эту точку с запятой не увидел бы!!!
Все работает..Уря!!!
← →
wal © (2006-02-14 14:17) [5]
> а мне надо что бы сразу прорисовка была.. или так нельзя?
Сразу, это когда?
Оно еще и невидимо может быть. А когда оно будет видимым, система сама скажет, что перерисовать надо, послав сообщение, и, в конце концов, вызвав paint. Если уж очень хочется, вызывай Invalidate.
С уважением.
← →
Юрий Зотов © (2006-02-14 23:15) [6]> wal
Сама по себе точка с запятой тут ни при чем. Но она привела к тому, что из конструктора вызывается тот же самый (а не унаследованный) конструктор. Естественно, возникает зацикливание и создается впечатление, что зависла Delphi.
← →
wal © (2006-02-15 12:06) [7]
> [6] Юрий Зотов © (14.02.06 23:15)
Это понятно. Но вот возник вдруг вопрос. При этом вызов Create будет происходить как вызов конструктора, или как обычного метода?
← →
icWasya © (2006-02-15 19:01) [8]wal © (15.02.06 12:06) [7]
> Но вот возник вдруг вопрос.
Вызов как конструктора происходит в при использовании такой синтаксической конструкции:
тип . конструктор
например
TMyClass.Create(Form2);
а в случае
переменная . конструктор , в том числе где переменная=Self, будет вызов обычной процедуры.
← →
Юрий Зотов © (2006-02-15 22:09) [9]> wal © (15.02.06 12:06) [7]
К [7] могу добавить лишь вопрос - а на фига его вообще вызывать? Inherited уже есть и больше ничего не требуется.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c