Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Beispiele für TPathData (https://www.delphipraxis.net/211043-beispiele-fuer-tpathdata.html)

philipp.hofmann 20. Jul 2022 11:28

Beispiele für TPathData
 
Hi,

ich kann im Style einer TCheckBox mit TPathData festlegen, wie der Marker dargestellt wird. Standard ist bei der CheckBox das X:

M912.1875,430.34375 L901.53125,441.1875 L890.875,430.375 L890.21875,431.03125 L890.1875,431 L889.625,431.59375 L889.5625,431.65625 L889.5,431.71875 L888.90625,432.28125 L899.59375,443.125 L888.84375,454.03125 L889.5625,454.71875 L889.59375,454.6875 L890.09375,455.1875 L890.09375,455.21875 L890.25,455.34375 L890.8125,455.9375 L901.53125,445.0625 L912.25,455.96875 L912.8125,455.375 L912.96875,455.25 L912.96875,455.21875 L913.46875,454.71875 L913.5,454.75 L914.21875,454.0625 L903.4375,443.125 L914.15625,432.25 L913.5625,431.6875 L913.5,431.625 L913.4375,431.5625 L912.875,430.96875 L912.84375,431 L912.1875,430.34375 Z

Kennt jemand eine Website, wo man typische Beispiele findet. Ich suche z.B. ein Beispiel für einen Haken statt des X und würde jetzt ungerne selbst anfangen rumzuprobieren.

Grüße, Philipp

Rollo62 20. Jul 2022 11:47

AW: Beispiele für TPathData
 
Ich glaube ganz ohne Fummelei wird es schwierig.
Ich suche mir was als SVG in den üblichen Verdächtigen Icon-Bibliotheken aus: MaterialIO, Bootstrap, usw. und versuche dann
mit Adobe Illustrator, Gimp oder InkScape das zu konvertieren.

Einfache B/W Icons sind dafür natürlich am Besten geeignet, komplexe mit Gradienten wird wohl eher schwieriger.

Eine Library speziell mit Pathdata ist mir so nicht bekannt, wäre schön eine zu haben, sag Bescheid wenn Du was findest :stupid:

philipp.hofmann 20. Jul 2022 17:20

AW: Beispiele für TPathData
 
Ja, danke. Der SVG-Path lässt sich ja manchmal, aber auch nicht immer, direkt in der Delphi-IDE importieren.

Rollo62 20. Jul 2022 19:15

AW: Beispiele für TPathData
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1508985)
Ja, danke. Der SVG-Path lässt sich ja manchmal, aber auch nicht immer, direkt in der Delphi-IDE importieren.

Es lässt sich eigentlich gut kombinieren mit simplen Primitiven.
Ich habe mir zum Beispiel meine eigenen "Icons" zusammengesbastelt, welche auf den gleichen Dimensionen basieren müssen (hier 24x24).
So kann ich z.B. einfach die Strings aneinanderhängen durch simple Addition.

Delphi-Quellcode:
const
    // Rahmen 24x24

    ...
     
    CPathIni_24x24_Framed_C             = 'M0 0 M24 24 M12 12z';

const
    // PathRel segments

    ....

    CPathRel_24x24_Arrow_Left            = 'm-12 -12 m14 7l-5 5 5 5V7z';
    CPathRel_24x24_Arrow_Right           = 'm-12 -12 m10 17l5-5-5-5v10z';

    ...

const
    // Kombination aus einem absolutem Rahmen und einem relativen Pfad

    CPath_Prev                     =   CPathIni_24x24_Framed_C + CPathRel_24x24_Arrow_Left;

    CPath_Next                     =   CPathIni_24x24_Framed_C + CPathRel_24x24_Arrow_Right;
Man muss nur darauf achten das ein additierbarer Pfad am Ende wieder auf einen definierten Punkt läuft, z.B. 0,0
Ich bin aber weit davon entfernt eine Riesenlibrary zu haben, ich packe mir immer nur was dazu wenn ich es brauche und nicht zu komplex ist.

Uwe Raabe 20. Jul 2022 21:23

AW: Beispiele für TPathData
 
Man kann sowas auch relativ komfortabel programmieren:
Delphi-Quellcode:
function MakePathData: string;
var
  pd: TPathData;
begin
  pd := TPathData.Create;
  try
    pd.AddRectangle(TRectF.Create(0, 0, 24, 24), 0, 0, AllCorners, TCornerType.InnerLine);
    pd.MoveTo(TPointF.Create(14, 7));
    pd.LineTo(TPointF.Create( 9, 12));
    pd.LineTo(TPointF.Create(14, 17));
    pd.VLineTo(7);
    pd.ClosePath;
    Result := pd.Data;
  finally
    pd.Free;
  end;
end;

Redeemer 20. Jul 2022 22:49

AW: Beispiele für TPathData
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1508985)
Ja, danke. Der SVG-Path lässt sich ja manchmal, aber auch nicht immer, direkt in der Delphi-IDE importieren.

Müsste man halt gucken, woran das scheitert. Es gibt SVG-Befehle bzw. -Syntax, daran scheitern auch große wie Affinity. Man kann z.B. hinter den beiden Flags vom Arc-Befehl das Leerzeichen weglassen. Außerdem kann man sich das Leerzeichen zwischen zwei Zahlen schenken, wenn a) die zweite Zahl negativ ist, oder wenn b) die zweite Zahl kleiner als 1 ist und gleichzeitig die erste eine Kommazahl oder in wissenschaftlicher Notation. Ist aber alles der Kompatibilität nicht zuträglich.

Was nun bei Rollo der Sinn von zweimal Move hintereinander ist oder warum in seinen „relativen Pfaden“ absolute Befehle vorkommen, weiß ich aber auch nicht.

Rollo62 21. Jul 2022 11:24

AW: Beispiele für TPathData
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Uwe Raabe (Beitrag 1508994)
Man kann sowas auch relativ komfortabel programmieren:
Delphi-Quellcode:
function MakePathData: string;
var
  pd: TPathData;
begin
  pd := TPathData.Create;
  try
    pd.AddRectangle(TRectF.Create(0, 0, 24, 24), 0, 0, AllCorners, TCornerType.InnerLine);
    pd.MoveTo(TPointF.Create(14, 7));
    pd.LineTo(TPointF.Create( 9, 12));
    pd.LineTo(TPointF.Create(14, 17));
    pd.VLineTo(7);
    pd.ClosePath;
    Result := pd.Data;
  finally
    pd.Free;
  end;
end;

Das stimmt, ich finde es aber bei komplexeren Shapes in der Regel viel effektiver das zu "zeichnen" z.B. in InkScape,
und dann als PathData-Text zu konvertieren.
Der Vorteil ist auch das man es dann in Inkskep direkt "sieht".

Zum Beispiel auch hiermit einfach in einem Online-Editor

Das ...
Zitat:

M19.5,12.2l-7.7,7.7V26c0,0.7,0.6,1.2,1.2,1.2h4.6v-5.2c0-0.3,0.3-0.6,0.6-0.6h2.5c0.3,0,0.6,0.3,0.6,0.6v5.2h4.6c0.7,0,1.2-0.6,1.2-1.2v-6.1L19.5,12.2L19.5,12.2z M20.2,9.1L29,18c0.2,0.2,0.3,0.4,0.3,0.7c0,0.5-0.4,0.9-0.9,0.9c-0.3,0-0.5-0.1-0.7-0.3l-8.2-8.2l-8.2,8.2c-0.2,0.2-0.4,0.3-0.7,0.3c-0.5,0-0.9-0.4-0.9-0.9c0-0.3,0.1-0.5,0.3-0.7l8.9-8.9C19,9,19.2,8.9,19.5,8.9C19.8,8.9,20,9,20.2,9.1z M19.5,39C8.7,39,0,30.3,0,19.5S8.7,0,19.5,0S39,8.7, 39,19.5S30.3,39,19.5,39z M19.5,0.4C9,0.4,0.4,9,0.4,19.5S9,38.6,19.5,38.6S38 .6,30,38.6,19.5S30,0.4,19.5,0.4z
Anhang 55236

... will man nicht wirklich programmieren, sondern "malen" :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz