AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Eigene Komponente X-beliebiges Aussehen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente X-beliebiges Aussehen

Ein Thema von MarcRB75 · begonnen am 26. Jun 2022 · letzter Beitrag vom 28. Jun 2022
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#1

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 26. Jun 2022, 13:01
Naja, deine Komponente bräuchte eine Angabe der Anzahl der Ecken.
Dann stelle dir den Stern mal so vor, dass alle Eckpunkte auf einer Kreisbahn liegen.
Aus der Eckenzahl wäre dann auszurechnen bei Welchem Winkel jeweils ein Eckpunkt auf
der Kreisbahn sein müsste und dann kann man bestimmt per Trigenometrie und unter Angabe
eines Radius ausrechnen wo die jeweilige X/Y Koordinate liegen müsste. Damit hättest du
alle Punkte des Polygons.

Das würde ich dann malk einfach mit einer TPaintBox zeichnen, noch ohne viel an eine
Komponente zu denken. Wenn du dann eine Methode hast die Radius und Eckenzahl als
Parameter bekommt und das auf der Paintbox zeichnen kann, dann hast du ja schon die
wesentliche Grundlage dafür.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#2

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 26. Jun 2022, 13:46
Ich verstehe. Also einen Stern kann ich ja zeichnen.
Dann muss ich quasi alle Punkte, die aus dem Stern bestehen, auch die Spitzpunkte
als Variable/Array deklarieren.

Aber wenn ich diese Koordinaten habe/hätte, wie kann ich diese Komponente so "angleichen", dass die Komponente nicht im Quadrat oder nur im Rechteck
ist, sondern an den Sternlinien entlanggeht? Geht das überhaupt??

Eine andere Überlegung von mir war... ..........(geht nicht Überlastung des Arbeitsspeichers ....naja... war eine Überlegung wert....)
Ich fange an zu Zeichnen:
Irgenwo ... auf einem Pixel.
Die Maustaste ist gedrück.
Wenn ich mich der Maus mich bewege, wird für jeden einzelnen Punkt ein neues Image (1 Pixel) erzeugt, das eine X-beliebige Farbe hat.
Gehe ich mit gedrückter Maus zurück, werden die Pixel, dessen Koordinaten ich ja kenne, gelöscht bzw. mit der Hintergrundfarbe überzeichnet.

Lasse ich die Maustaste los, entsteht mein Bild aus den einzelnen Punkten.
Bei Bedarf, kann ich diese Punkte/Linien löschen, durch überzeichnen...

Das wäre doch aus was für den Anfang oder?
Marc

Geändert von MarcRB75 (26. Jun 2022 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 26. Jun 2022, 14:13
Du musst Deine Zielstellung am besten in kleinere Teilbereiche zerlegen.

Zunächst würde ich einfach mal ein leeres Formular nehmen und darauf Figuren zeichnen ermöglichen.
Also im Grunde Objekte, die Du dann in der Größe verändern kannst.
Das wird schon eine ordentliche Aufgabe.

Später kannst Du das dann versuchen so anzupassen, dass Du tatsächliche Windows-Controls "ausstanzt".
Schwierig wird es sicherlich, diese dann noch Größenänderbar zu gestalten (womöglich wird das auch kaum umsetzbar).

Erkläre doch nochmal, wie Du diese "Controls" dann benutzen willst. Mit anderen Schaltern, Edits und Memos zusammen in einem Formular?
Wie und wann soll die Größe der Controls geändert werden?


In meinem Beispiel mit dem Schatten benutze ich kein Standardcontrols sondern zeichne alles selbst in ein Formular und merke mir alles, was ich wo gezeichnet habe.
Das zweite Beispiel schneidet einfach Teile eines normalen Panels weg.
Das sind sehr unterschiedliche Ansätze. Welcher davon möglicherweise für Dich passt, kann ich noch nicht so recht einschätzen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#4

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 26. Jun 2022, 15:09
Also ich habe man einen Anhang gemacht, vielleicht versteht dann jeder besser was ich meine.
Also, es geht um Kurven, aber auch Sterne und sonstige Formen:

Der Anhang besteht aus:
a) Entwickler-Ebene / Bild
b) Code
c) Laufzeit - Anfang sowie wenn man die Punkte verschiebt.

Und das Ganze möchte ich aber als eigene Komponente machen, mit einem relativ genauen Rahmen um die Kuve und den einzelnen Punkte herum.

P.S. Vielleicht sagt der Eine oder Andere bei meinem Code ... furchtbar ... das könnte man anders machen. Ich weiß,
aber ich hab mir halt alles selber beigebracht, weiß leider auch nicht alles. Und das Ganze in diesem Fall ist halt
ein Versuch und bin eigentlich gds. ganz glücklich, dass das überhaupt so funktioniert.
Aber leider kann ich es nicht als Komponente mit schönem, genauen Rahmen um die Linien manchen.

Oder zumindest um die eigentliche Kurve herum und die Punkte setze ich einzeln (jeder Punkt ist eine eigene Komponente)...
Angehängte Grafiken
Dateityp: jpg Start.jpg (39,2 KB, 36x aufgerufen)
Dateityp: jpg Bild_Verschiebung der Punkte.jpg (71,6 KB, 31x aufgerufen)
Dateityp: jpg Entwicklerbild.jpg (86,4 KB, 29x aufgerufen)
Dateityp: jpg Eine Komponente mit angepasstem Rahmen.jpg (12,7 KB, 29x aufgerufen)
Angehängte Dateien
Dateityp: txt Test_Kurven.txt (15,4 KB, 6x aufgerufen)
Marc

Geändert von MarcRB75 (26. Jun 2022 um 15:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 27. Jun 2022, 09:17
Erst mal Respekt. Das sieht schon nicht schlecht aus.

Ich gehe davon aus, dass Du Deine "COntrols" somit nur auf einer speziellen Zeichenfläche darstellen willst und nicht mit VCL-Controls zusammen in einem beliebigen Formular.

Dann finde ich Deinen Ansatz schon geeignet. Du kannst das etwa so sehen, wie im Delphi-Designer. Du hast hier im Delphi einen Button auf ein Formular gezogen.
Wenn Du ihn in der Größe ändern willst, musst Du ihn focussieren und erhältst "Anfasser", die Du dann ziehen kannst.
Die sind aber nicht Teil der Komponente sondern werden als Werkzeug von der IDE über dem Button selbst platziert.

Das entspricht Deiner Lösung und ist so auch sehr sinnvoll. Ich würde also grundsätzlich bei Deiner Lösung bleiben und die ggf. nur noch etwas an den Bedarf anpassen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (27. Jun 2022 um 09:41 Uhr)
  Mit Zitat antworten Zitat
MarcRB75

Registriert seit: 31. Mai 2018
Ort: Hof/Saale
51 Beiträge
 
Delphi XE2 Starter
 
#6

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 27. Jun 2022, 14:02
Ohhh das freut mich, dass es Dir gefällt.

Ich möchte jedoch statt des Image eine Paintbox verwenden, geht auch, weil diese durchsichtig ist und ich dadurch ggf. andere Linien durchsehen kann.
Denn wenn ich z.B. 2 Images überlagere, ist nur das ganze Front-Image zu sehen, das hintere nicht. Mit Transparent ect ... das funktioniert leider nicht.

Wenn ich Dich richtig verstehe:
Das Ganze (Bogen, alle Punkte) plaziere ich auf einem Image/Paintbox, die ich vorher als neue Komponente mache.
Gut, das geht, das bekomme ich hin.

Ja die Punkte selbst, möchte ich aber auch als "Werkzeug" benutzen, zur Komponente selbst (Bogen mit Anfangs+Endpunkt), wenn diese auf ein Formular gezogen wird. Das bekomme ich auch hin, ist kein Problem.

Aber wie kann ich dann, wie Du mir zuvor geschrieben hast, die Linien/Punkte "Ausstanzen", so dass kein viereckiger Rahmen entsteht, wenn ich
die "Bogen-Komponte" auf ein Formular lege?

Könntest Du mir bitte sagen, wie das geht oder wie ich das machen muss?

Angenommen ich habe alle Punkte des Bogens und die der Punkte ermittelt, wie kann ich dann n diese Form "Ausstanzen", so dass ein schöner Rahmen drumherum entsteht? Könntest Du mir das bitte sagen?
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.558 Beiträge
 
Delphi 12 Athens
 
#7

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 27. Jun 2022, 14:12
Durchsichtig ist sie nicht wirklich.
Aber, die PaintBox ist keine eigeneständiges WinControl, sondern hackt sich in den Parent rein und mals sich auf dessen Desktop ... daher kann der Desktop vorher noch seinen Inhalt da hinmalen, wo sich die PaintBox anschließend hinmalt.

Ebenso machen es TLabel und TBevel. (das "echte" Windows-Label, ist TStaticText ... weil zufällig die "Label"-Klasse "STATIC" heißt)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Eigene Komponente X-beliebiges Aussehen

  Alt 27. Jun 2022, 14:54
Aber wie kann ich dann, wie Du mir zuvor geschrieben hast, die Linien/Punkte "Ausstanzen", so dass kein viereckiger Rahmen entsteht, wenn ich
die "Bogen-Komponte" auf ein Formular lege?

Könntest Du mir bitte sagen, wie das geht oder wie ich das machen muss?

Angenommen ich habe alle Punkte des Bogens und die der Punkte ermittelt, wie kann ich dann n diese Form "Ausstanzen", so dass ein schöner Rahmen drumherum entsteht? Könntest Du mir das bitte sagen?

1) Ausstanzen

Da ist m.E. genau die Frage. Du sagst, Du willst die Bogenkomponente "auf ein Formular legen". Bedeutet das, Du willst sie benutzen wie und neben einem Edit, Panel oder Button?
Oder willst Du sie nur auf der Fläche eines anderen Controls darstellen und benutzbar machen?

Wenn Du sie z.B. wie ein nicht-rechteckiges Panel benutzen willst, dann kannst Du Dir meinen zweiten Link im Beitrag #2 nochmal anschauen. Da werden dann einfach Teile des rechteckigen Controls weggeschnitten bzw. ausgestanzt.
Das Problem ist, dass Du "innerhalb" des Controls keine "Anfasser" positionieren kannst, bzw. damit dann nur eine Verkleinerung machbar wäre. Wenn Du die Anfasser weiter nach außen ziehen willst, wäre das nicht möglich, da das Control ja dort keinen Zugriff mehr auf sein Umfeld hat.
Das heißt, die Anfasser müssen dann immer von einer höheren Ebene (Designer oder Formular) bereitgestellt werden. In dessen Bereich kannst Du dann die Anfasser bewegen - auch außerhalb der Bogenkomponente.

Wenn Du keine Vermischung deiner Bogenkomponente mit anderen VCL-Controls brauchst und Du Dich auf eine individuelle Zeichenfläche beschränken kannst, dann kannst Du Dir das Beschneiden von VCL-Controls ersparen und einfach Deine Bogencontrols auf eine beliebige Zeichenfläche malen.


2) Transparenz

Die VCL unterstützt keine wirkliche Transparenz. Wie himitsu beschrieben hat malt ein Label z.B. einfach seinen Text auf die Zeichenfläche seines Parent. Also malt zuerst der Parent seine Zeichenfläche fertig (z.B. weiße Füllung) und dann malt das Label noch seinen Text darauf. Dadurch scheint das Label transparent zu sein.
Wenn der Parent sich aber neu malt (z.B. wegen einer Größenänderung) ist die Fläche wieder weiß und das Label muss seinen Text erneut zeichnen um wieder sichtbar zu sein.
Ein Label über die gesamte Formularbreite zu setzen und dabei andere Controls zu überdecken ist nicht möglich.
Mit einem Panel geht das, da ist dann aber keine echte Transparenz möglich.
Die VCL ist da also etwas eingeschränkt.

Diese "Pseudotransparenz" kannst Du für Dich natürlich nachbilden.
Du könntest Dein Hintergrundbild auf Deine Zeichenfläche kopieren und dann darauf Deine Bogencontrols zeichnen. Bei jeder Änderung musst Du dann natürlich wieder beides machen.
Je nachdem wie aufwändig diese Aktionen sind, könnte es sinnvoll sein, die neue "Gesamtbildberechnung" (Hintergrund + Bögen) in einen Thread auszulagern und erst das Ergebnis dann tatsächlich auf der Zeichenfläche darzustellen.
Das kann Flackern und/oder ein hängen der Anwendung vermeiden helfen.


Wenn Du ein wenig zu dem Thema stöbern willst, kannst Du Dich hier mal umschauen:
https://www.delphipraxis.net/175033-...-schlecht.html


3) VCL-Control oder eigenständige Zeichenfläche

Also die wichtigste Entscheidung ist wohl zunächst, ob Du mit einer bestimmten Zeichenfläche klar kommst, auf denen alle Deine Figuren bearbeitet und genutzt werden oder ob Du Deine Controls wie ein Edit oder Panel überall in einer Anwendung einsetzen willst...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz