Control zur Darstellung frei positionierbarer Icons

Rund um die LCL und andere Komponenten
Antworten
Jacksonson
Beiträge: 4
Registriert: Fr 28. Jan 2011, 16:12

Control zur Darstellung frei positionierbarer Icons

Beitrag von Jacksonson »

Hallo Lazarus Gemeinde,

seit Tagen suche ich nach einer Möglichkeit, (mit Bitmaps hinterlegbare) Icons frei auf einer Fläche zu positionieren. Die Icons sollten per Maus selektierbar sein (auch per Auswahl-Rechteck). Ich habe bereits viel mit Listview herumprobiert. Leider bewirkt ein Umschalten des Viewstyles auf vsIcon nur das die Items als fest am Raster ausgerichtete Icons erscheinen, deren Position nicht verändert werden kann. Ich brauche ein Control das prinzipiell dasselbe kann, wie der File browser im Ubuntu-Explorer Nautilus, wenn man die Anzeige auf Symbolansicht und manuelle Objektanordung schaltet. Wenn man diesen Icons dann noch Objekte mitgeben kann bzw. einen Pointer auf dieselben, dann wäre ich rundum glücklich :wink:
Vielleicht gibt es ja schon soetwas als Standardcontrol?! Habe leider nicht die Zeit mich da tiefer reinzuknien. Würde mich sehr freuen, wenn mir jemand weiterhelfen könnte!

Viele Grüße, der Jens!

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von Christian »

Nein das können derzeit keine Standartcontrols.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Jacksonson
Beiträge: 4
Registriert: Fr 28. Jan 2011, 16:12

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von Jacksonson »

Meiner Ansicht nach sollte das Setzen von AutoArrange:=False bei den IconOptions des Listviews doch die Lösung sein. Allerdings funktioniert das nicht. Die Icons werden nach wie vor automatisch nebeneinander gesetzt, auch wenn man Ihnen explizit eine Position zuweist. Ich dreh noch am Rad deswegen... :evil: Ist diese Eigenschaft vielleicht noch nicht implementiert für Linux? Unter Windows funzts! Gibt's vielleicht nen dreckigen Hack, wie ich mir das zurechtbasteln könnte?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von pluto »

Du müsstest so eine Komponente schon selbst erstellen. Kostet eigentlich nicht viel Zeit.

Hatte Theo nicht mal was gemacht? Vielleicht hilft das weiter.....
(Weiß den Namen leider nicht mehr genau).

Als HIlfe könntest du dir mein Paint2 anschauen: http://www.lazarusforum.de/viewtopic.ph ... lit=paint2" onclick="window.open(this.href);return false;
dort kannst du Objekte frei bewegen auch mehrere zu gleich. Vielleicht hilft es dir. Ist aber etwas größer und ob das noch unter Lazarus läuft ist eine andere Frage.

Hier mal die Schritte, wie du vorgehen müsstest:
01: Du brauchst eigene Klassen, z.b. TMyObject
02: Dieser Klasse braucht Felder, wie Position von typ TPoint z.b. und Icon von Typ TBitMap.
03: Du brauchst ein Container, eine einfache Objekt Liste tut es in diesen Fall
04: Du brauchst jetzt eine Funktion, die herraus finden, ob die Position in einem Objekt liegt Stichwort: PtInrect.
05: Gezeichnet könnte das ganze auf eine einfache Paint Box oder Image werden.
Fertig. *G*
MFG
Michael Springwald

Jacksonson
Beiträge: 4
Registriert: Fr 28. Jan 2011, 16:12

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von Jacksonson »

pluto hat geschrieben:Du müsstest so eine Komponente schon selbst erstellen. Kostet eigentlich nicht viel Zeit.
Danke zuallererst mal für Deine Hilfe. So wie Du es schreibst hört es sich nicht so schwer an. Leider sind meine Fähigkeiten auf dem Gebiet der OOP nicht sonderlich ausgeprägt :roll: Ich dachte nur, dass es vlt. ne simple Erklärung gibt, warum vsIcon bei mir nicht so funktioniert wie unter Vista... Hat das vlt. etwas mit den verschiedenen Komponentenbibs zu tun (GTK<->VCL)? Offensichtlich kann man beim GTK- Listview überhaupt nicht frei auf die Canvas zeichnen, sondern nur innerhalb der Itembereiche, die wiederum automatisch am Raster ausgerichtet werden. Gibt es nicht ne Möglichkeit diese Rasterung irgendwie aufzuheben :?: (Sorry, vlt. stell ich mir das auch nur zu einfach vor...)

VG

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von pluto »

Erklärung gibt, warum vsIcon bei mir nicht so funktioniert wie unter Vista...
Die Beobachtung habe ich auch schon gemacht. Ich denke, dass ist ein Fehler der LCL...
Hat das vlt. etwas mit den verschiedenen Komponentenbibs zu tun (GTK<->VCL)?
Ja. Die ListView ist ja "nur" ein Witget, welches von der jeweiligen LCL-Schnittelle Implementiert wird. Die meisten Komponenten kommen von verwendeten Witget.
? Offensichtlich kann man beim GTK- Listview überhaupt nicht frei auf die Canvas zeichnen, sondern nur innerhalb der Itembereiche, die wiederum automatisch am Raster ausgerichtet werden.
Das ist auch der Grund für die ListView.
Gibt es nicht ne Möglichkeit diese Rasterung irgendwie aufzuheben
Kann ich mir Eigentlich nicht vorstellen.
(Sorry, vlt. stell ich mir das auch nur zu einfach vor...)
Ich habe mal eine eigene ListView Angefangen, sie ist zwar nur im Entwickler Statidum, bietet aber Deutliche Vorteile gegenüber der Standard ListView. Ich habe zwar noch kein Modus eingebaut, wo man die Einträge frei Positionieren kann, aber dass sollte nicht so schwer sein. Eigentlich möchte ich sie noch nicht hoch laden, da hier noch viel gemacht werden müsste.

Es gibt noch eine Möglichkeit für dich:
Nutze einfach mehrere TImage Komponenten und packe das in einer ScrollBox. schon hast du das was du haben möchtest. Du müsstest "nur" noch das Markieren einbauen.
MFG
Michael Springwald

Jacksonson
Beiträge: 4
Registriert: Fr 28. Jan 2011, 16:12

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von Jacksonson »

pluto hat geschrieben: Es gibt noch eine Möglichkeit für dich:
Nutze einfach mehrere TImage Komponenten und packe das in einer ScrollBox. schon hast du das was du haben möchtest. Du müsstest "nur" noch das Markieren einbauen.
Eine ähnliche Idee hatte ich auch schon, indem ich einfach shapes bzw. images auf einem Panel oder wie Du es vorschlägst, einer Scrollbox, positioniere. Leider hatte ich keinen Schimmer wie ich das bereits angesprochene Problem mit der Mausselektion bewerkstelligen soll und hab die Idee wieder verworfen. Immerhin soll das ganze mit Auswahlrechteck über mehrere Icons funktionieren... :?
Außerdem will ich mir dann auch noch Informationen zu jedem Icon speichern können, wobei hier ein Pointer auf ein Objekt in einer Liste reichen würde...
Falls du ne Idee hast wie ich das mit der Mausselektion am geschicktesten anstell' würd ich mich sehr freuen.
Vielen Dank jedenfalls für deinen bisherigen Rat! :)

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von theo »

Am besten du beginnst bei einer TCustomControl Ableitung, dann malst du da deine Dinger (Objekte) drauf wie es dir gefällt.
Klingt vllt. für den Anfang etwas aufwändig, dafür hast du aber alles unter Kontrolle.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Control zur Darstellung frei positionierbarer Icons

Beitrag von pluto »

Klingt vllt. für den Anfang etwas aufwändig, dafür hast du aber alles unter Kontrolle.
Kommt drauf an, wie die Ziele aussehen. Natürlich wäre das die beste Lösung.
MFG
Michael Springwald

Antworten