AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi XE8 Maps Marker Generieren

Ein Thema von hewy · begonnen am 18. Mai 2023 · letzter Beitrag vom 24. Mai 2023
Antwort Antwort
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
948 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 15:27
So, hat ein wenig gedauert:

Delphi-Quellcode:
procedure TForm1.Make_MapPoint;
var
  origin, innerL, midL, midR, lft, tp, rgt, innerR : TPoint;
  radius, hgt : integer;

  BMP : TBitmap;
begin
  radius := 25;
  hgt := 90;
  origin.X := 27;
  origin.Y := 92;
  //control points
  innerL.X := origin.X;
  innerL.Y := origin.Y - (hgt - radius) div 3;
  midL.X := origin.X - radius;
  midL.Y := origin.Y - 2*((hgt - radius) div 3);
  //top circle
  lft.X := origin.X - radius;
  lft.Y := origin.Y - (hgt - radius);
  tp.X := origin.X;
  tp.Y := origin.Y - hgt;
  rgt.X := origin.X + radius;
  rgt.Y := lft.Y;
  //control points
  midR.X := origin.X + radius;
  midR.Y := midL.Y;
  innerR.X := origin.X;
  innerR.Y := innerL.Y;

  BMP := TBitmap.Create;

  with BMP do
  begin
    Width := 55;
    Height := 95;
    with Canvas do
    begin
      Brush.Color := clLime;
      Brush.Style := bsSolid;
      Pen.Color := clBlack;
      Pen.Width := 2;
      FillRect(Rect(0, 0, Width, Height));

      PolyBezier([origin, innerL, midL, lft]);
      Arc(lft.X, tp.Y, rgt.X, rgt.Y + radius, rgt.X, rgt.Y, lft.X, lft.Y);
      PolyBezier([rgt, midR, innerR, origin]);
      Brush.Color := clYellow;
      FloodFill(origin.X, origin.Y - radius, Canvas.Pen.Color, TFillStyle.fsBorder);
    end;
    Transparent:= true;
    TransparentColor := clWhite; // <<-Absichtlich andere Farbe als Brush.Color !!!
  end;

  PaintBox1.Canvas.Draw(2, 2, BMP);

  BMP.TransparentMode := tmAuto;

  PaintBox1.Canvas.Draw(100, 50, BMP);

  BMP.Free;

end;
Siehe auch das Beispiel zu Canvas.Draw.

[Edit]

Was sagt den TMS Maps wie Bilder/Images zugeliefert werden sollen?
Irgendwo muss doch stehen wie das mit dem Transparent gehandhabt wird.
[/Edit]
Angehängte Grafiken
Dateityp: jpg MP_Test.jpg (20,6 KB, 19x aufgerufen)

Geändert von Alter Mann (21. Mai 2023 um 15:50 Uhr)
  Mit Zitat antworten Zitat
hewy

Registriert seit: 2. Aug 2006
Ort: Arni (Region Zürich) Schweiz
83 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: Delphi XE8 Maps Marker Generieren

  Alt 22. Mai 2023, 09:57
Vielen Dank 'Alter Mann', Hast Dir einiges an Arbeit geleistet, Funktioniert soweit muss nun mit TMS prüfen was für deren Map Komponente geht.
Geben dann hier Bescheid wie ich es schlussendlich lösen konnte.
Heinrich Wyssen
  Mit Zitat antworten Zitat
hewy

Registriert seit: 2. Aug 2006
Ort: Arni (Region Zürich) Schweiz
83 Beiträge
 
Delphi XE5 Enterprise
 
#3

AW: Delphi XE8 Maps Marker Generieren

  Alt 23. Mai 2023, 16:50
Lösung gefunden, mit dem Code Beispiel von ‘Alter Mann’, das BitMap Resultat in ein png Format umwandeln und daraus ein Base64 String erstellen.
png := TPngImage.Create;
png.Assign( BMP );
Result := GetBase64Image(png);
Das wird von TMS FNC PAPS so korrekt mit den gewünschten transparenten Flächen angezeigt
Danke nochmals
Heinrich Wyssen
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Delphi XE8 Maps Marker Generieren

  Alt 24. Mai 2023, 07:32
Ich raff das mit dem Base64-String nicht.
Warum solltest du diesen Umweg gehen? Schickst du das per Netzwerk irgendwo hin?
In der groben Übersichtsdoku steht nichts von Base64?
https://download.tmssoftware.com/doc...cmaps/#markers
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#5

AW: Delphi XE8 Maps Marker Generieren

  Alt 24. Mai 2023, 15:34
Ich raff das mit dem Base64-String nicht.
Vorweg, ich kenne die Komponente nicht. In der Beschreibung steht als Voraussetzung TTMSFNCWebBrowser. Vermutlich steuert die Komponente Services, wie z.B. Google Maps, die in einem Browser-Fenster laufen. Ein Image in HTML lässt sich mit folgenden Schema füllen:
Code:
Image.URL := 'data:image/'+ MimeType +';base64,' + BinStream.Base64;
Bis bald...
Thomas
  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 21:37 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