*.wmf nicht erkannt

Rund um die LCL und andere Komponenten
wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: *.wmf nicht erkannt

Beitrag von wp_xyz »

fpvectorial muss man nicht installieren, sondern nur übersetzen. Unter "Package" / "Package-Datei (.lpk) öffnen" zu deinem Ordner navigieren und fpvectorialpkg.lpk öffnen, "Kompilieren" klicken - fertig. Das Package dann zu einem Projekt hinzufügen, so dass dir die Routinen zur Verfügung stehen.

Schau dir zuerst mein Demo wmfViewer an (im Ordner examples).

Eine Warnung vorab: fpvectorial ist noch lange nicht fertig, und die meisten Reader/Writer sind noch eine Riesenbaustelle.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Wieso kommt fpvcetorial nicht unter" Package/Installierte Packages einrichten..." ?
Ist dies, weil es noch eine Riesenbaustelle ist, oder hat dies einen anderen Grund.

ZB. ist opengl auch im componets-Ordner, und diese Package erscheint unter "Package/Installierte Packages einrichten... ".

Ich werde es heute abend mal probieren, ob meine wmf gefressen werden.
Es sind ganz einfache s/w Zeichnungen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: *.wmf nicht erkannt

Beitrag von wp_xyz »

Weil es ein reines Runtime-Package ist, und dies wiederum, weil es keine installierbaren Komponenten enthält. Ich habe gerade bei Version 1.4.4 nachgesehen, damals tauchte es noch unter "Installierte Packages einrichten" auf, aber da war es auch noch fälschlicherweise als "Design- und Runtime-Package" konfiguriert. (Du kannst das prüfen unter den Optionen des Packages > IDE-Integration > Package-Typ).

Hoffentlich enthalten deine Zeichnungen keine gefüllten Polygone mit Löchern - hier hat die Polygon-Füllroutine von fpvectorial einen Bug, die die Löcher übermalt.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Ich habe dein Beispiel auf Minimum abgespeckt, und es läuft mit meinen wmf.

Code: Alles auswählen

procedure TForm1.LoadImage(const AFileName: string);
begin
  FreeAndNil(FVec);
  FVec := TvVectorialDocument.Create;
  FVec.ReadFromFile(AFilename);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  LoadImage('36890E-Ax-Bx-Cx.wmf');
end;
 
procedure TForm1.FormClick(Sender: TObject);
begin
  LoadImage('36890E-SS-Ay-By-Cy-Dx.wmf');
  Repaint;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FVec);
end;
 
procedure TForm1.Panel1Paint(Sender: TObject);
var
  scalex, scaley: single;
  Page: TvPage;
begin
  if FVec <> nil then begin
    Page := FVec.GetPage(0);
 
    with Panel1 do begin
      scalex := Width / Page.Width;
      scaley := Height / Page.Height;
 
      Canvas.Brush.Color := clWindow;
      Canvas.FillRect(0, 0, Width, Height);
 
      Page.Render(Canvas, 0, 0, scalex, scaley);
    end;
  end;
end;
 
end.


Was mich verwundert, das es hier keine SIGSEV gibt.

Code: Alles auswählen

begin
  FreeAndNil(FVec);
 

weile folgendes ein SIGSEV auslöst.

Code: Alles auswählen

 
var
  o:TObject;
begin
  FreeAndNil(o);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: *.wmf nicht erkannt

Beitrag von wp_xyz »

Wenn du wie ich FVec als Objektvariable des Formulars deklariert hast, ist es bei der ersten Verwendung mit nil initialisiert, d.h. FreeAndNil macht gar nichts. Bei der Verwendung als lokaler Variablen so wie in deinem 2. Beispiel, ist o nicht initialisiert, d.h. ist weder nil noch zeigt es auf allokierten Speicher.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

wp_xyz hat geschrieben:Wenn du wie ich FVec als Objektvariable des Formulars deklariert hast, ist es bei der ersten Verwendung mit nil initialisiert, d.h. FreeAndNil macht gar nichts. Bei der Verwendung als lokaler Variablen so wie in deinem 2. Beispiel, ist o nicht initialisiert, d.h. ist weder nil noch zeigt es auf allokierten Speicher.


Stimmt, so ein Code gibt kein SIGSEV.

Code: Alles auswählen

var
  o: TObject;
begin
  o := nil;
  o.Free;
end;   

In dem Fall, ist die Free-Methode noch recht intelligent.

PS;
Schau dir zuerst mein Demo wmfViewer an (im Ordner examples).

Bist du beim Lazarus Team dabei, da dort Code von dir vorhanden ist ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: *.wmf nicht erkannt

Beitrag von wp_xyz »

Mathias hat geschrieben:Bist du beim Lazarus Team dabei, da dort Code von dir vorhanden ist ?

Weiß nicht, das klingt so hochtrabend... Ich habe früher viel Code für TAChart gepostet, und da hat man mir sukzessive immer mehr Schreibrechte im Repository und im CCR eingeräumt.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Eine Warnung vorab: fpvectorial ist noch lange nicht fertig, und die meisten Reader/Writer sind noch eine Riesenbaustelle.

Ich hatte letzte Zeit fast täglich geguckt was für Dateien in de Trunk geändert wurden.
So wie es aussieht wird täglich an fpvectorial gearbeitet. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Mathias hat geschrieben:Ich habe ein altes Delphi-Programm konvertiert, dort habe ich mit

Code: Alles auswählen

Image1.Picture.LoadFromFile(KabelTyp + '.wmf')

wmf-Dateien eingebunden.
Sowohl unter Windows, wie Linux, kommt Format unbekannt.

Was ist die einfachste und sauberste Lösung, um diese Dateien auch mit Lazarus zu verwenden ?

Gut, ich könnte es in PNG umwandeln, aber da es sich um Linienzeichnungen handelt, will ich dies eigentlich nur zur Not machen.

Da das Post über 3½ Jahre alt ist, will ich nachfragen, ob unterdessen in Sache WMF in Lazarus sich etwas bewegt hat ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: *.wmf nicht erkannt

Beitrag von wp_xyz »

Meines Wissens nicht. Du musst weiterhin den Umweg über fpvectorial gehen.

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Ich habe eine Miniprogramm geschrieben mi folgender Funktion:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  page: TvPage;
  FVec: TvVectorialDocument;
begin
  FVec := TvVectorialDocument.Create;
  FVec.ReadFromFile('test.wmf');
  page := FVec.GetPage(0);
 
  Image1.Picture.Bitmap.Width := round(page.Width);
  Image1.Picture.Bitmap.Height := round(page.Height);
 
  Image1.Picture.Bitmap.Canvas.Brush.Color := clGreen;
  Image1.Picture.Bitmap.Canvas.FillRect(0, 0, Image1.Picture.Bitmap.Width,
    Image1.Picture.Bitmap.Height);
 
  page.Render(Image1.Picture.Bitmap.Canvas, 0, 0, 1, 1);
  FVec.Free;
end

Dies funktioniert fehlerfrei.

Füge ich den gleichen Code in mein komplexes Programm ein, kommt folgender Fehler:

Code: Alles auswählen

Projekt KabelPruefer hat Exception-Klasse »Exception« ausgelöst mit der Meldung:
Unsupported vector graphics format.


Ich habe als Versuch getestet, ob er die Datei findet.

Code: Alles auswählen

  if FileExists('test.wmf') then ShowMessage('Datei vorhanden');
  FVec.ReadFromFile('test.wmf'); // Hier knallts !

Es ist die gleiche test.wmf wie oben.

Woran könnte dies liegen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: *.wmf nicht erkannt

Beitrag von Winni »

Hi!

Package --> Open Package File (*.lpk)

Winni

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: *.wmf nicht erkannt

Beitrag von wp_xyz »

Bin jetzt nicht mehr so mit fpvectorial bewandert. Nachdem das Package von felipe stammt, genauso wie fpspreadsheet, wird er es so gemacht haben, dass nur solche Dateiformate eingebunden werden, deren Reader/Writer in der uses-Anweisung steht. Also: Hast du bei deinem Kabelpruefer-Programm die Unit "wmfvectorialreader" in der uses-Zeile?

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Danke für die Infos werde es bei Gelegenheit probieren.

Könnte des ein ähnliches Problem sein, so wei es bei der Unit Printers auch der Fall ist ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6165
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: *.wmf nicht erkannt

Beitrag von Mathias »

Ich habe jetzt folgende unit eingebunden: "wmfvectorialreader"
Jetzt kommt die obige Fehlermeldung nicht mehr, dafür meldet sich der Debugger. Wen ich den Debbuger ausschalte, dann kommt ein SIGSEGV.

Bei dem Testprogramm hat die unit "wmfvectorialreader" keinen Einfluss.

Die Packages "fpvectorialpkg", ist ein beiden Projekten eingebunden. Siehe Anhang.
Dateianhänge
Bildschirmfoto vom 2020-02-14 13-17-11.png
Bildschirmfoto vom 2020-02-14 13-17-11.png (27.09 KiB) 2054 mal betrachtet
Bildschirmfoto vom 2020-02-14 13-15-38.png
Bildschirmfoto vom 2020-02-14 13-15-38.png (18.62 KiB) 2054 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten