Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi XE8 Maps Marker Generieren (https://www.delphipraxis.net/213075-delphi-xe8-maps-marker-generieren.html)

hewy 18. Mai 2023 20:55

Delphi XE8 Maps Marker Generieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Arbeite seit einiger Zeit an einer Logistik Applikation. Mit Delphi XE8 und TMS Maps.
Funktionier eigentlich wunderbar, habe aber ein Hindernis mit im Programm generierten Marker

Die Marker generiere ich mit dem hier beschriebenem Beispiel:
https://stackoverflow.com/questions/...nvas-on-delphi

Die Schwierigkeit mit der ich Kämpfe ist die Marker werden wie gewünscht erstellt nur dass ich jeweils ein Weisses Rechteck um die Marker habe. Siehe Bild im Anhang.
Vielleicht kann mir jemand eine Typ geben wich diese weisse Fläche transparent machen könnte.
Vielen Dank schon mal im Voraus
HeWy

Rollo62 19. Mai 2023 06:43

AW: Delphi XE8 Maps Marker Generieren
 
Ich arbeite nicht mit TMS Maps, dort sollte es aber ein AfterDraw geben, benutzt Du dies zum zeichnen ?

Delphi-Quellcode:
procedure TForm1.WebOSMaps1AfterDraw(Sender: TObject; ACanvas: TCanvas);
var
  MarkerPoint: TPoint;
begin
  // Perform custom drawing here
  MarkerPoint := WebOSMaps1.LatLngToScreen(PointLatLng(37.7749, -122.4194)); // Adjust the coordinates as needed

  // Draw a custom marker shape
  ACanvas.Brush.Color := clRed;
  ACanvas.Pen.Color := clBlack;
  ACanvas.Pen.Width := 2;
  ACanvas.Ellipse(MarkerPoint.X - 10, MarkerPoint.Y - 10, MarkerPoint.X + 10, MarkerPoint.Y + 10);

  // Draw custom text
  ACanvas.Font.Size := 12;
  ACanvas.Font.Style := [fsBold];
  ACanvas.Font.Color := clWhite;
  ACanvas.TextOut(MarkerPoint.X - 5, MarkerPoint.Y - 5, 'Custom Marker');
end;

hewy 19. Mai 2023 11:55

AW: Delphi XE8 Maps Marker Generieren
 
Danke Rollo64 für deine Hinweis, Bei TMS gibt es zwar ein on AfterDraw allerdings wird dies nur einmal aufgerufen beim Erstellen der Karte. Also ist es nicht das muss mal schauen ob es sowas für das Zeichnen der Marker gibt. Da der weisse Hintergrund bei meinem Marker die einzige Unschönheit ist mit der ich aktuell herum übe will ich doch versuchen dies transparent zu machen.
Vieleicht findet sich doch noch eine Lösung für die Transparenz.

Rollo62 19. Mai 2023 15:47

AW: Delphi XE8 Maps Marker Generieren
 
Nur mal geraten: Wenn dem so ist, vielleicht hilft dann ein Refresh oder Repaint oder ähnlich um das Neuzeichnen zu Triggern, falls es das bei den TMS Maps gibt.

hewy 20. Mai 2023 07:54

AW: Delphi XE8 Maps Marker Generieren
 
Nun ja geht mit onDraw nicht, die Transparency muss wirklich der Marker Graphik mitgegeben werden, da der Marker als eigene Graphik in einem Owerlay angezeigt wird und daher nicht direkter Bestandteil der Karten Graphik ist.
Aus dem gezeichneten Marker mache ich einen Base64 String kenne mich da nicht wirklich aus aber mal sehen vielleicht kann ich in diesem String vor der Übergabe zum Darstellen die Transparenten Flächen (Farbe) noch konvertieren.

himitsu 20. Mai 2023 13:01

AW: Delphi XE8 Maps Marker Generieren
 
Nja, irgendwas muß dabei als "transparent" erkannt werden.
* das könnte eine bestimmte Farbe sein,
* aber auch die Farbe eines bestimmten Pixels (die erste Ecke)
* oder z.B. ein AlphaKanals in der Farbe (32 Bit-Farbe)

Was nun aber für dieses Overlay verwendet wird, das sollte doch bestimmt in der Doku stehen?

hewy 21. Mai 2023 12:13

AW: Delphi XE8 Maps Marker Generieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für deinen Hint Himitsu,
ich übergebe einen Base64 String was auch einwandfrei funktioniert. TMS Maps Zeichnet einfach das was übergeben wird.
Übergebe ich base64 Strings, die ich mit einem separaten Graphik Programm erstellte und darin den gewünschten Bereich Transparent mache dann ist die Darstellung so wie gewünscht.
Generiere ich die Marker mit der beigefügten Funktion (Siehe Anlage) fehlt der Transparente Teil und dieser wird dann leider weiss oder was auch immer ich definiere dargestellt.
Also meine Frage wie bekomme ich meine Funktion ‘GenerateMarker’ Marker so hin dass die Blauen Marker den Weissen Bereich transparent macht?
Siehe Anhang: Blaue Ist Gelbe Soll

himitsu 21. Mai 2023 13:16

AW: Delphi XE8 Maps Marker Generieren
 
Das Bast64 ist vollkommen irrelevant, gegenüber einer binären Übergabe.
Die Übergabe per se funktioniert ja schließlich.

Es kommt also auf das drauf an, was als Daten übergeben wird.
ImageTyp und das Format.


Du wirst ja wohl nicht auf eine PaintBox malen.

Was für ein Typ hat das Bild und in welchem Format wird das Bild gespeichert.
TPngImage, TBitmap, TJPEGImage, ...
und beim Bitmap z.B. die Farbtiefe/Bits (16, 24, 32 und wie sie interpretiert werden, ala AlphaKanal) oder ob es zusätzlich eine BitMaks gibt.

Alter Mann 21. Mai 2023 13:51

AW: Delphi XE8 Maps Marker Generieren
 
Brush.Style := bsClear;

hewy 21. Mai 2023 14:13

AW: Delphi XE8 Maps Marker Generieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok habe das Ganze meiner Meinung nach auf das notwendige Minimum reduziert.
Bekomme aber immer noch die vollen Hintergrund Flächen möchte alles was clFuchsia ist transparent haben.

Delphi-Quellcode:
    Function tMarkerUtils.GenerateTriMarker(aColor: tColor): string;

    var MarkerImage: TImage;
        TransparentColor: TColor;
        Points: array of TPoint;

    begin
      MarkerImage:= TImage.Create(nil);
      try
        MarkerImage.Width:= 55;
        MarkerImage.Height:= 30;
        MarkerImage.Picture:=nil;

        TransparentColor := clFuchsia; // Background color

        MarkerImage.Canvas.Brush.Style := bsClear;
        MarkerImage.Canvas.Brush.Color:= TransparentColor;
        MarkerImage.Picture.Bitmap.TransparentColor := TransparentColor;
        MarkerImage.Picture.Bitmap.Transparent:= true;
        MarkerImage.Canvas.FillRect(Rect(0, 0, MarkerImage.Width, MarkerImage.Height));

        SetLength(Points, 3);
        Points[0] := Point(5, 5);
        Points[1] := Point(35, 5);
        Points[2] := Point(20, 20);
        MarkerImage.Canvas.Pen.Width := 2;
        MarkerImage.Canvas.Pen.Color := clBlack;
        MarkerImage.Canvas.Brush.Color := aColor;
        MarkerImage.Canvas.Polygon(Points);

        Result:= GetBase64Image(MarkerImage);
      finally
        MarkerImage.Free;
      end;
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Seite 1 von 2  1 2      

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