added TControlStyle csOwnedChildSelection

git-svn-id: trunk@9235 -
This commit is contained in:
mattias 2006-05-03 20:28:45 +00:00
parent 089474d7bb
commit 68b3e095be
4 changed files with 35 additions and 9 deletions

View File

@ -174,6 +174,7 @@ type
function HandleSetCursor(var TheMessage: TLMessage): boolean;
// procedures for working with components and persistents
function GetDesignControl(AControl: TControl): TControl;
function DoDeleteSelectedPersistents: boolean;
procedure DoDeletePersistent(APersistent: TPersistent; FreeIt: boolean);
procedure MarkPersistentForDeletion(APersistent: TPersistent);
@ -1092,6 +1093,23 @@ begin
end;
end;
function TDesigner.GetDesignControl(AControl: TControl): TControl;
var
OwnerControl: TControl;
begin
Result:=AControl;
if (Result=nil) or (Result.Owner=LookupRoot) then exit;
if (Result.Owner=nil) then exit(nil);
if (Result.Owner is TControl) then begin
OwnerControl:=TControl(Result.Owner);
if csOwnedChildsSelectable in OwnerControl.ControlStyle then
exit;
Result:=GetDesignControl(OwnerControl);
end else begin
Result:=nil;
end;
end;
function TDesigner.SizeControl(Sender: TControl; TheMessage: TLMSize):boolean;
begin
Result:=true;
@ -1119,11 +1137,13 @@ var
NonVisualComp: TComponent;
ParentForm: TCustomForm;
Shift: TShiftState;
Begin
DesignSender: TControl;
begin
FHintTimer.Enabled := False;
Exclude(FFLags,dfHasSized);
SetCaptureControl(nil);
ParentForm:=GetParentForm(Sender);
DesignSender:=GetDesignControl(Sender);
ParentForm:=GetParentForm(DesignSender);
if (ParentForm=nil) then exit;
MouseDownPos:=GetFormRelativeMousePosition(Form);
@ -1142,7 +1162,7 @@ Begin
MouseDownComponent:=ComponentAtPos(MouseDownPos.X,MouseDownPos.Y,true,true);
if (MouseDownComponent=nil) then exit;
end;
MouseDownSender:=Sender;
MouseDownSender:=DesignSender;
case TheMessage.Msg of
LM_LBUTTONDOWN,LM_MBUTTONDOWN,LM_RBUTTONDOWN:
@ -1170,7 +1190,7 @@ Begin
{$IFDEF VerboseDesigner}
DebugLn('************************************************************');
DbgOut('MouseDownOnControl');
DbgOut(' Sender=',dbgsName(Sender));
DbgOut(' Sender=',dbgsName(Sender),' DesignSender=',dbgsName(DesignSender));
//write(' Msg=',TheMessage.Pos.X,',',TheMessage.Pos.Y);
//write(' Mouse=',MouseDownPos.X,',',MouseDownPos.Y);
//writeln('');
@ -1264,6 +1284,7 @@ var
ParentClientOrigin, PopupPos: TPoint;
SelectedCompClass: TRegisteredComponent;
SelectionChanged, NewRubberbandSelection: boolean;
DesignSender: TControl;
procedure GetShift;
begin
@ -1444,7 +1465,8 @@ Begin
// check if the message is for the designed form
// and there was a mouse down before
SenderParentForm:=GetParentForm(Sender);
DesignSender:=GetDesignControl(Sender);
SenderParentForm:=GetParentForm(DesignSender);
if (MouseDownComponent=nil) or (SenderParentForm=nil)
or (SenderParentForm<>Form)
or ((ControlSelection.SelectionForm<>nil)
@ -1465,7 +1487,7 @@ Begin
{$IFDEF VerboseDesigner}
DebugLn('************************************************************');
DbgOut('MouseUpOnControl');
DbgOut(' ',Sender.Name,':',Sender.ClassName);
DbgOut(' Sender=',dbgsName(Sender),' DesignSender=',dbgsName(DesignSender));
//write(' Msg=',TheMessage.Pos.X,',',TheMessage.Pos.Y);
DebugLn('');
{$ENDIF}
@ -1521,6 +1543,7 @@ var
ACursor: TCursor;
SelectedCompClass: TRegisteredComponent;
CurSnappedMousePos, OldSnappedMousePos: TPoint;
DesignSender: TControl;
begin
if [dfShowEditorHints,dfShowComponentCaptionHints]*FFlags<>[] then begin
FHintTimer.Enabled := False;
@ -1532,7 +1555,8 @@ begin
FHintWindow.Visible := False;
end;
SenderParentForm:= GetParentForm(Sender);
DesignSender:=GetDesignControl(Sender);
SenderParentForm:= GetParentForm(DesignSender);
if (SenderParentForm = nil) or (SenderParentForm <> Form) then exit;
OldMouseMovePos:= LastMouseMovePos;

View File

@ -4778,7 +4778,6 @@ begin
end;
// select the new form (object inspector, formeditor, control selection)
DesignerForm:=FormEditor1.GetDesignerForm(NewComponent);
if not (ofProjectLoading in Flags) then begin
GlobalDesignHook.LookupRoot := NewComponent;
TheControlSelection.AssignPersistent(NewComponent);

View File

@ -277,6 +277,8 @@ end;
constructor TCustomButtonPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle:=ControlStyle+[csOwnedChildsSelectable];
Align := alBottom;
BevelInner := bvNone;

View File

@ -205,7 +205,8 @@ type
csDesignFixedBounds, // control can not be moved nor resized in designer
csHasDefaultAction, // control implements useful ExecuteDefaultAction
csHasCancelAction, // control implements useful ExecuteCancelAction
csNoDesignSelectable // control can not be selected at design time
csNoDesignSelectable, // control can not be selected at design time
csOwnedChildsSelectable // child controls owned by this control are selectable in the designer
);
TControlStyle = set of TControlStyleType;