Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
Delphi 5 Professional
|
Re: Größe von GroupBox ändern
21. Dez 2005, 16:33
Hallo,
ich habe sowas mal vor einiger Zeit zusammengebastelt. Ist sicher nicht perfekt, aber vielleicht kann es dir als Basis für eine Lösung deines Problems dienen:
Delphi-Quellcode:
//-------------- Größenänderung von Objecten -----------------------------------
{
Anwendung in den Objekt-Ereignissen OnMouseMove, OnMouseDown und OnMouseUp:
FAllgUP2.ChgSizeMMove(Sender, Shift, X,Y);
FAllgUP2.ChgSizeMDown(Sender, Button);
FAllgUP2.ChgSizeMUp(Sender, Button);
}
procedure TFAllgUP21.ResetMBLeft;
begin
fMBLeftDown := false;
fSzTyp := 0;
end;
procedure TFAllgUP21.ChgSizeMUp(Sender: TObject; Button: TMouseButton);
begin
fMBLeftDown := false; //not (Button = mbLeft);
end;
procedure TFAllgUP21.ChgSizeMDown(Sender: TObject; Button: TMouseButton);
begin
fMBLeftDown := Button = mbLeft;
fLstTyp := fSzTyp;
end;
procedure TFAllgUP21.ChgSizeMMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
const
MinHeight = 50; //damit das Objekt nicht vom Bildschirm verschwinden kann
MinWidth = 50;
var
cleft, cwidth,
// ctop,
cheight : integer;
begin
// ctop := (Sender as TControl).Top;
cheight := (Sender as TControl).Height;
cleft := (Sender as TControl).Left;
cwidth := (Sender as TControl).Width;
if (y > cheight - 15) and (y < cHeight + 15) then begin
fSzTyp := 2;
if (x > cwidth - 15) and (x < cwidth) then fSzTyp := 5;
end
else if y < 15 then fSzTyp := 1
else if x < 15 then fSzTyp := 3
else if (x > cwidth - 15) and (x < cwidth) then fSzTyp := 4
else fSzTyp := 0;
case fSzTyp of
1 : (Sender as TControl).Cursor := crSizeAll;
2 : (Sender as TControl).Cursor := crVSplit;
3,
4 : (Sender as TControl).Cursor := crHSplit;
5 : (Sender as TControl).Cursor := crSizeNWSE;
else (Sender as TControl).Cursor := crDefault;
end; // of case
if fMBLeftDown then begin
case fLstTyp of
1 : begin
if (ssShift in Shift) then begin
(Sender as TControl).Align := alClient;
(Sender as TControl).Align := alNone;
end
else begin
ReleaseCapture;
(Sender as TControl).perform(WM_SysCommand,SC_DragMove,0);
end;
{ if x > 25 then begin
ReleaseCapture;
(Sender as TControl).perform(WM_SysCommand,SC_DragMove,0);
end
else if (y < 25) and (x < 25) and (ssShift in Shift) then begin
(Sender as TControl).Align := alClient;
(Sender as TControl).Align := alNone;
end;
}
end;
2 : (Sender as TControl).Height := Max(y, MinHeight);
3 : begin
(Sender as TControl).Width := Max(cwidth - x, MinWidth);
(Sender as TControl).Left := cleft + x;
end;
4 : (Sender as TControl).Width := Max(x, MinWidth);
5 : begin
(Sender as TControl).Height := Max(y, MinHeight);
(Sender as TControl).Width := Max(x, MinWidth);
end;
end; // of case
end;
SetDf;
end;
//-------------- end of Größenänderung von Objecten ----------------------------
Anwendung:
Delphi-Quellcode:
gbSeekArt : TGroupBox; // oder auch TJvgGroupBox;
procedure TFAuf.gbSeekArtMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
FAllgUP21.ChgSizeMMove(Sender, Shift, X,Y);
end;
procedure TFAuf.gbSeekArtMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FAllgUP21.ChgSizeMDown(Sender, Button);
end;
procedure TFAuf.gbSeekArtMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FAllgUP21.ChgSizeMUp(Sender, Button);
FAllgUP21.WrObjPos(inifile, gbSeekArt); // speichert Position und Größe in eine Ini-Datei
end;
mfg
eddy
|
|
Zitat
|