AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponenten zur Laufzeit verschieben, Größe verändern
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten zur Laufzeit verschieben, Größe verändern

Ein Thema von Helmi · begonnen am 16. Jan 2004 · letzter Beitrag vom 18. Jan 2004
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Komponenten zur Laufzeit verschieben, Größe verändern

  Alt 16. Jan 2004, 20:06
Hallo,

ich bräuchte da mal nen Tip:

Ich möchte zur Laufzeit Komponenten verschieben, deren Größe ändern, aber genau so, wie bei der Erstellung eines Formulars. Also mit den schwarzen Vierecken aussenrum, den Doppelpfeile beim vergrößern/verkleinern, etc.


Kann mir da jemand weiter helfen?

mfg
Helmi
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Komponenten zur Laufzeit verschieben, Größe verändern

  Alt 16. Jan 2004, 20:19
Hallo und herzlich willkommen in der Delphi-PRAXiS!

Zum Thema: Vielleicht hilft dir dieser Beitrag ja weiter: Klick mich! Einfach mal durchlesen.

Zum Cursor: Es gibt da die Eigenschaft Cursor. Da gibts glaub ich auch den Doppelpfeil.

Man liest sich, Stanlay
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

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

Re: Komponenten zur Laufzeit verschieben, Größe verändern

  Alt 17. Jan 2004, 11:56
Hallo Helmi,

ich nutze folgende UP's dafür:

Code:
// Größenänderung von Objecten während der Laufzeit:
// Maus-Cursor wird verändert

var
  // für UP's zur Veränderung der Größe von TControl
  fMBLeftDown : boolean = false;
  fSizeChg   : boolean = false;
  fTyp       : short = 0;
  fLstTyp    : short = 0;

//-------------- Größenänderung von Objecten -----------------------------------
{
  Anwendung in den Objekt-Ereignissen OnMouseMove, OnMouseDown und OnMouseUp:
  FAllgUP3.ChgSizeMMove(Sender, Shift, X,Y);
  FAllgUP3.ChgSizeMDown(Sender, Button);
  FAllgUP3.ChgSizeMUp(Sender, Button);
}

function TFAllgUP3.ChgSizeMUp(Sender: TObject; Button: TMouseButton):Boolean;
begin
  fMBLeftDown := false; //not (Button = mbLeft);
  fLstTyp := fTyp;
  Result := fSizeChg;
end;

procedure TFAllgUP3.ChgSizeMDown(Sender: TObject; Button: TMouseButton);
begin
  fMBLeftDown := Button = mbLeft;
  fLstTyp := fTyp;
end;

procedure TFAllgUP3.ChgSizeMMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
const
  ChgCursor = 7;
  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 - ChgCursor) and (y < cHeight + ChgCursor) then begin
    fTyp := 2;
    if (x > cwidth - ChgCursor) and (x < cwidth) then fTyp := 5;
  end
  else if y < ChgCursor then fTyp := 1
  else if x < ChgCursor then fTyp := 3
  else if (x > cwidth - ChgCursor) and (x < cwidth) then fTyp := 4
  else fTyp := 0;

  case fTyp 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   // oben
            if (ssShift in Shift) then begin
              (Sender as TControl).Align := alClient;
              (Sender as TControl).Align := alNone;
              fSizeChg := true;
            end
            else begin
              ReleaseCapture;
              (Sender as TControl).perform(WM_SysCommand,SC_DragMove,0);
            end;
          end;

      2 : begin  // unten
            (Sender as TControl).Height := Max(y, MinHeight);
              fSizeChg := true;
          end;
      3 : begin  // links
            (Sender as TControl).Width := Max(cwidth - x, MinWidth);
            (Sender as TControl).Left := cleft + x;
              fSizeChg := true;
          end;
      4 : begin  // rechts
            (Sender as TControl).Width := Max(x, MinWidth);
              fSizeChg := true;
          end;
      5 : begin  // untere rechte Ecke
            (Sender as TControl).Height := Max(y, MinHeight);
            (Sender as TControl).Width := Max(x, MinWidth);
              fSizeChg := true;
          end;
    end; // of case
  end;
end;
//-------------- end of Größenänderung von Objecten ----------------------------


Verwendung:

procedure TFInfoFinder.gbProgMouseDown(Sender: TObject;         // gb = GroupBox
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FAllgUP3.ChgSizeMDown(Sender, Button);
end;

procedure TFInfoFinder.gbProgMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  FAllgUP3.ChgSizeMMove(Sender, Shift, X,Y);
end;

procedure TFInfoFinder.gbProgMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FAllgUP3.ChgSizeMUp(Sender, Button);
  // geänderte Daten in INI-Datei speichern
  FAllgUP3.WrObjPos(DataPath + fnAPIni, gbProg);
end;

// Pos-Werte aus INI lesen
FAllgUP3.RdObjPos(DataPath + fnAPIni, gbProg);
Mußt Du natürlich auf Deine Bedürfnisse anpassen.

Funktioniert nicht unbedingt perfekt, aber für meine Anwendungen ausreichend. Z.B. gibt's wohl ein Problem, wenn rechts ein Scrollbar verläuft. Deshalb habe ich die Teile, die ich in der Größe änderbar zulasse, in eine GroupBox gelegt.

Verbesserungsvorschläge werden gern entgegen genommen.

mfg
eddy
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Komponenten zur Laufzeit verschieben, Größe verändern

  Alt 17. Jan 2004, 15:14
Hallo,

danke für eure Tipps!

Aber leider ist das nicht ganz das was ich suche!

Ich möchte z. B. ein Label auf einer Form platzieren, das genau die gleiche Umrandung hat, wie beim erstellen einer Form in Delphi (nicht zur laufzeit).

Ich hoffe das klingt jetzt nicht zu kompliziert
Deshalb hab ich mal ein kleines Bildchen angehängt.

So hätte ich gerne ein Label zur Laufzeit gesehen...

Ansonsten kann ich die Codes benutzen, zum vergrößeren/verkleinern etc.

Kann mir da jemand weiterhelfen?

mfg
Helmi
Angehängte Grafiken
 
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#5

Re: Komponenten zur Laufzeit verschieben, Größe verändern

  Alt 18. Jan 2004, 17:26
Zum Objekte verschieben kannst du das benutzen:
Delphi-Quellcode:
 ReleaseCapture;
 SendMessage(Form1.Handle, wm_SysCommand,$f012,0);
Einfach in die MouseDownprozedur schreiben und das Handle des zu verschiebenden Objekts eingeben:
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz