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