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

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

проблемка с обработкой WM_SIZE на компоненте [D6, Win2k]


Страницы:   1 2

Андрусь ©   (2002-07-17 13:42:00) 

Привет всем! Тут такая проблемка: нужно ловить на компоненте WM_SIZE, кроме случая создания компонента. Такой код:

Procedure TCDSPanel.PanelResizeing(var Message: TWMSize);
Begin
Inherited;
If /условие/ Then SizeChanged:=True;
End;

Посоветуйте условие,чтобы обрубать при создании компонента на форме. Проверял FormState,ComponentState - пусто.
Зараннее спасибо!


Skier   (2002-07-17 15:43:00) [21]

>Андрусь

;
> SetParent срабатывает до WM_SIZE.


Чушь !


Смотри сюда :


constructor TCustomPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csSetCaption, csOpaque, csDoubleClicks, csReplicatable];
Width := 185; //здесь
Height := 41; //и здесь...
FAlignment := taCenter;
BevelOuter := bvRaised;
BevelWidth := 1;
FBorderStyle := bsNone;
Color := clBtnFace;
FFullRepaint := True;
UseDockManager := True;
end


Андрусь   (2002-07-17 15:38:00) [22]

Не понял смысла - я же говорю,что SetParent срабатывает до WM_SIZE. И условие на первый WM_SIZE будет тру,а надо бы нет...
Не хочется делать так

constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSizeChanged := False;
WasFirstCall:=False;
end;

procedure TMyPanel.WMSize(var Message: TWMSize);
begin
inherited;
if WasFirstCall then FSizeChanged := True
else WasFirstCall:=True;
end;


Eugene Lachinov   (2002-07-17 15:30:00) [23]

Странно, а у меня после, посмотри Call Stack на момент PanelResizeing(var Message: TWMSize), может найдешь что-нибудь подходящее, что можно перекрыть для инициализации этого флажка


Skier   (2002-07-17 15:28:00) [24]

>Андрусь


TMyPanel = class(TPanel)
private
FParentWasSet : Boolean;
FSizeChanged : Boolean;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
protected
procedure SetParent(AParent: TWinControl); override;
public
constructor Create(AOwner : TComponent); override;
end; //TMyPanel


{ TMyPanel }

constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSizeChanged := False;
FParentWasSet := False;
end;

procedure TMyPanel.SetParent(AParent: TWinControl);
begin
inherited SetParent(AParent);
FSizeChanged := False;
FParentWasSet := True;
end;

procedure TMyPanel.WMSize(var Message: TWMSize);
begin
inherited;
if HandleAllocated and FParentWasSet then FSizeChanged := True;
end;



Андрусь   (2002-07-17 15:14:00) [25]

>Eugene Lachinov ©
Спасибо и вам,но эта процедура отрабатывает 2 раза до WM_SIZE...


Eugene Lachinov   (2002-07-17 14:37:00) [26]

procedure SetParent(AParent: TWinControl); override;

procedure TCDSPanel.SetParent(AParent: TWinControl);
begin
inherited SetParent(AParent);
SizeChanged := False
end;


Андрусь   (2002-07-17 14:04:00) [27]

Спасибо,конечно,но не стабатывает :-{


Skier   (2002-07-17 13:47:00) [28]

>Андрусь
HandleAllocated(...) ?


Страницы:   1 2

Наверх

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