Hallo,
weis nicht recht wie ich mich ausdrücken soll: In der IDE gibt es ja die Möglichkeit, plazierte GUI Elemente zu verschieben und zu resizen. Eine solche Komponente suche ich.
Kennt jemand eine solche VCL/LCL?
LG
Günter
Grafik: Resize mit Fangecken
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Grafik: Resize mit Fangecken
Also das kann man eigentlich Recht einfach,Objektorientiert handeln, da man nur ein Paar MouseEvents (MouseMove,...) dafür brauch...
Da die IDE aber selbst mit FreePascal geschrieben ist wird es bestimmt auch irgendwo in deren Quellcode zu finden sein...
Da die IDE aber selbst mit FreePascal geschrieben ist wird es bestimmt auch irgendwo in deren Quellcode zu finden sein...
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 37
- Registriert: Do 6. Mär 2008, 12:48
- OS, Lazarus, FPC: WinXP/Mint13KDE (Lazarus 1.0.8 FPC 2.6.2)
- CPU-Target: 64 Bit
- Wohnort: Halle (Saale)
Re: Grafik: Resize mit Fangecken
Hallo gbl!
Kann es sein, dass du eine Lösung suchst, Nachfahren von TWinControl so zu verschieben, dass sie z.B. aneinander oder an den Rändern deines Parentforms "anklicken" (ich kenne es als Magnetfunktion von einem der letzten WinAmp-Clients)?
Wenn ja, wäre ich an einer allgemeinen Lösung auch interessiert. ;o)
Gruß
Aldi
Kann es sein, dass du eine Lösung suchst, Nachfahren von TWinControl so zu verschieben, dass sie z.B. aneinander oder an den Rändern deines Parentforms "anklicken" (ich kenne es als Magnetfunktion von einem der letzten WinAmp-Clients)?
Wenn ja, wäre ich an einer allgemeinen Lösung auch interessiert. ;o)
Gruß
Aldi
Re: Grafik: Resize mit Fangecken
Hi,
ja so in etwa. Das Andocken an Magnetlinien wäre dann der Bonus. "Jeder" GUI Editor macht das eigentlich vor. Habe allerdings kein eigenes Example gefunden. Und so fit bin ich in diesem Bereich auch nicht. MS-Visio ist auch ein gutes Beispiel für meine Frage.
Vielleicht programmiert MAC ein Quick'n Dirty Example....
LG
Günter
ja so in etwa. Das Andocken an Magnetlinien wäre dann der Bonus. "Jeder" GUI Editor macht das eigentlich vor. Habe allerdings kein eigenes Example gefunden. Und so fit bin ich in diesem Bereich auch nicht. MS-Visio ist auch ein gutes Beispiel für meine Frage.
Vielleicht programmiert MAC ein Quick'n Dirty Example....
LG
Günter
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Grafik: Resize mit Fangecken
Ich benutze in meinem Spiel ein verschiebbares und größenveränderbares Panel. Vielleicht hilft dir das...
http://scrabble.svn.sourceforge.net/vie ... xt%2Fplain" onclick="window.open(this.href);return false;
http://scrabble.svn.sourceforge.net/vie ... xt%2Fplain" onclick="window.open(this.href);return false;
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Grafik: Resize mit Fangecken
Quick & Dirty kommt sofort
Also ich hab nur einmal den Grobaufbau gemacht.
Im Grunde fängt deine Komponente erstmal alle OnMouseDown on MouseMove und OnMouseUp events ab (es müsste auch nur mit onMouseMove über shift gehen, aber naja...). Das Beispiel UmgehungsFunktion_OnMouseMove zeigt dann wie du die Procedure doch weiter verwenden kannst...
Verschieben funktioniert in alle richtungen, kein Bounding check oder Gridcheck oder soetwas in der Art.
Es is möglich das Panel in die Breite zu vergrößern, verkleinern, wenn man 5 picel von rand entfernt klickt und dann verschiebt...
In die Höhe im momment nicht , ist aber analog dazu...
Zum starten brauchst du nur eine leere Form und ein OnFormCreate-Ereignis...

Also ich hab nur einmal den Grobaufbau gemacht.
Im Grunde fängt deine Komponente erstmal alle OnMouseDown on MouseMove und OnMouseUp events ab (es müsste auch nur mit onMouseMove über shift gehen, aber naja...). Das Beispiel UmgehungsFunktion_OnMouseMove zeigt dann wie du die Procedure doch weiter verwenden kannst...
Verschieben funktioniert in alle richtungen, kein Bounding check oder Gridcheck oder soetwas in der Art.
Es is möglich das Panel in die Breite zu vergrößern, verkleinern, wenn man 5 picel von rand entfernt klickt und dann verschiebt...
In die Höhe im momment nicht , ist aber analog dazu...
Zum starten brauchst du nur eine leere Form und ein OnFormCreate-Ereignis...
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,ExtCtrls;
type
{ TForm1 }
TMyPanel = class;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
MyPanel:TMyPanel;
end;
{ TMyPanel }
TMyPanel = class(TPanel)
private
mpos:TPoint;
run:boolean;
procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
public
UmgehungsFunktion_OnMouseMove:TMouseMoveEvent;
constructor Create(TheOwner: TComponent); override;
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
MyPanel := TMyPanel.Create(Form1);
MyPanel.Parent := Form1;
end;
{$R *.lfm}
{ TMyPanel }
procedure TMyPanel.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
run := True;
mpos := Point(x,y);
end;
procedure TMyPanel.MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
run := False;
end;
procedure TMyPanel.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
);
begin
if not run then exit;
if x < 5 then
begin
Width := Width + mpos.x - x;
Left:=Left - mpos.x + x;
end
else
begin
if x > Width-5 then
begin
Width := Width - mpos.x + x;
mpos.x := x;
end
else
begin
Left:=Left - mpos.x + x;
end;
end;
Top := Top - mpos.y + y;
if assigned(UmgehungsFunktion_OnMouseMove) then UmgehungsFunktion_OnMouseMove(Sender,Shift,x,y);
end;
constructor TMyPanel.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
run := False;
UmgehungsFunktion_OnMouseMove := nil;
Self.OnMouseDown:= @MouseDown;
Self.OnMouseUp:= @MouseUp;
Self.OnMouseMove:= @MouseMove;
end;
end.
Code: Alles auswählen
Signatur := nil;