Ich suche ein grafisches Element, welches der Anwender (nicht ich) so vergrössern, verkleinern, verschieben kann, wie es in der IDE möglich ist.
Hintergrund: es sollen (in gewissen Grenzen) die Möbel eines Raumes dargestellt werden als Grundriss, nicht perspektivisch.
Runde Elemente sind nicht notwendig, rechteckig genügt.
Hat da jemand eine Idee, wie diese grafische Steuerung übernommen werden kann ?
Ein Element verkleinern, vergössern, verschieben
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Ein Element verkleinern, vergössern, verschieben
Meinst du das Rechteck mit den 8 schwarzen Punkten, welches die Komponente umrahmt ?
Diese modifizier-Komponente müsste eigentlich irgendwo in Lazarus zu finden sein. Man müsste nur wissen wie diese heisst.
In Thundbird ist sowas auch vorhanden, wen man dort Bilder einfügt.
Diese modifizier-Komponente müsste eigentlich irgendwo in Lazarus zu finden sein. Man müsste nur wissen wie diese heisst.
In Thundbird ist sowas auch vorhanden, wen man dort Bilder einfügt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Ein Element verkleinern, vergössern, verschieben
Lazarus verwendet keine eigene Komponente hierfür, das Vorgehen ist um einiges komplexer:Mathias hat geschrieben:Diese modifizier-Komponente müsste eigentlich irgendwo in Lazarus zu finden sein. Man müsste nur wissen wie diese heisst.
- TComponent.ComponentState steuert den aktuellen Zustand der Komponente; csDesigning heißt, dass die Komponente durch den User verändert werden kann
- TCustomForm.Designer enthält ein Objekt, dass für die Design-Time-Verarbeitung zuständig ist; dies ist z.B. das Zeichnen des Punktmusters, Copy und Paste der Komponenten etc.
- Das Designer-Objekt (Klass TDesigner aus Lazarus\designer\designer.pp) wird von Lazarus erstellt und dem Form zugewiesen.
- Beim Erstellen des Designer-Objekts muss ein TControlSelection-Objekt (Unit Lazarus\designer\controlselection.pp) mitgegeben werden; dieses enthält eine Liste der aktuell ausgewählten Objekte. Es ist auch für das Verschieben, Snapping, sowie das Zeichnen der "Grabbers" (die Punkte zum Vergrößern/Verkleinern der Komponenten) zuständig
Jedoch gibt es dabei ein paar Fallstricke:
- Die Lazarus IDE selbst ist unter der GNU GPL veröffentlicht; werden diese Units verwendet, muss auch das fertige Programm unter die GPL gestellt werden (bei den normalen LCL-Kompnenten ist dies nicht der Fall)
- Es gibt einige Abhängigkeiten, so sind die Packages zur Ide-Integration (IDEIntf und DebuggerIntf) sowie SynEdit ebenfalls in das Projekt aufzunehmen (von der Lizenz kein Problem)
- Verschiedene weitere Units und Include-Files der IDE werden benötigt
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
self.SetDesigning(True, True);
self.Designer := TDesigner.Create(Self, TControlSelection.Create);
end;
Einfacher dürfte es werden, eine eigene Designer-Klassen zu schreiben. Abgucken ist erlaubt - aber nicht Abschreiben!
--
Jetzt seid ihr an der Reihe

MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Re: Ein Element verkleinern, vergössern, verschieben
Ich hatte befürchtet, dass es so ausgeht.
Mittlerweile habe ich in einem kleinen Testprogramm ein TPanel als Grundelement verwendet, und durch die geeigente Auswertung seiner verschiedenen OnMouse-Events scheint alles so zu funktionieren, wie ich es mir vorstelle.
Statt des "Snappers" verwende ich verschiedene Cursorformen, die anzeigen, was gerade gemacht werden kann.
Mittlerweile habe ich in einem kleinen Testprogramm ein TPanel als Grundelement verwendet, und durch die geeigente Auswertung seiner verschiedenen OnMouse-Events scheint alles so zu funktionieren, wie ich es mir vorstelle.
Statt des "Snappers" verwende ich verschiedene Cursorformen, die anzeigen, was gerade gemacht werden kann.
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ein Element verkleinern, vergössern, verschieben
In der JVCL von Jediprojekt sind die Diagramming-Komponenten von Jim Cooper enthalten (seit 2002). Ich habe die in der Vergangenheit mit Lazarus mal zum laufen bekommen.
https://sourceforge.net/p/jvcl/code/HEA ... gramShape/
Das sind auch 2 .doc files drinnen mit Erklärungen wie das ganze funktioniert.
https://sourceforge.net/p/jvcl/code/HEA ... gramShape/
Das sind auch 2 .doc files drinnen mit Erklärungen wie das ganze funktioniert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).