Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Komponentengröße verändern mit Mauß z. Laufzeit?


JRegier - Fr 20.05.05 12:46
Titel: Komponentengröße verändern mit Mauß z. Laufzeit?
Hallo, ich habe eine Komponente in Panel gelegt den ich auf AutoSize := True gesetzt
habe. Und nun habe ich für die Komponente folgendes:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure OnMouseDown(..);
begin
  OldWidth := Komp.Width;
  OldHeight := Komp.Height;
  DownX := X;
  DownY := Y;
end;

procedure OnMouseMove(..);
begin
  Komp.Width := X - DownX + OldWidth;
  Komp.Height := Y - DownY + OldHeight;
end;


Aber wenn ich die größe ändere dann flatert es hin und her weil ja das X dadurch ständig ändert! Wie tue ich das abfangen? das die Veränderte differenz mit reingerechnet wird
und die Komponente sich ruhig verhält, ohne das jetzt die Komponente in der Größe explosionsartig anwächst?

Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt.


MrFox - Fr 20.05.05 16:06

Also ich habs mal bei mir ausprobiert...

So funktionierts bei mir Perfekt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
    down := true
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
down := false;
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if down = false then exit;
Panel1.Height := Y;
Panel1.Width := X;
end;


Wobei Panel1 natürlich die zu verändernde Komponente ist und down eine globale Boolean-Variable.


JRegier - Fr 20.05.05 17:49

user profile iconMrFox hat folgendes geschrieben:


Wobei Panel1 natürlich die zu verändernde Komponente ist und down eine globale Boolean-Variable.


Ist klar Danke ich werds versuchen! wobei bei mir ich die Komponente im Panel verändere!


JRegier - Sa 21.05.05 00:07

user profile iconJRegier hat folgendes geschrieben:
user profile iconMrFox hat folgendes geschrieben:


Wobei Panel1 natürlich die zu verändernde Komponente ist und down eine globale Boolean-Variable.


Ist klar Danke ich werds versuchen! wobei bei mir ich die Komponente im Panel verändere!


Ach ich habs mein Problem war das ich während der Größenänderung die Componenten immer wieder neu anordne also die benachbarten Komponeten! Ich hab jetzt einfach nach der Größenänderung
die Komponenten in OnMouseUp angeordnet!


JRegier - So 22.01.06 09:45

user profile iconMrFox hat folgendes geschrieben:
Also ich habs mal bei mir ausprobiert...

So funktionierts bei mir Perfekt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if down = false then exit;
Panel1.Height := Y;
Panel1.Width := X;
end;


Wobei Panel1 natürlich die zu verändernde Komponente ist und down eine globale Boolean-Variable.


Aber wie geht's denn nun wenn ich die Componente nach links hin vergrößern will? So funktioniert's doch nicht!


MrFox - So 22.01.06 19:04

user profile iconJRegier hat folgendes geschrieben:

Aber wie geht's denn nun wenn ich die Componente nach links hin vergrößern will? So funktioniert's doch nicht!


Wenn MouseDown im oberen linken Eck war ((X < 10)and(Y < 10)) dann zusätzlich zur Vergrößerung die Koordinaten um die gleiche Anzahl an Pixeln wie die Komponente vergrößert wird zurückverschieben.