Einzelnen Beitrag anzeigen

Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#4

Re: Größe von GroupBox ändern

  Alt 21. Dez 2005, 15: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
  Mit Zitat antworten Zitat