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
matze: 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
MrFox 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
JRegier hat folgendes geschrieben: |
MrFox 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
MrFox 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
JRegier 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!