| Autor |
Beitrag |
P_G
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: Di 19.10.04 10:01
Hallo,
Hat jemand ein Code-Beispiel für die Verwendung von ENHMFENUMPROC, um auf die einzelnen Records eines Metafiles und deren Eigenschaften zuzugreifen?
Das Ziel hierbei ist folgendes:
Für jeden Record eines Metafiles soll die damit verbundene Zeichenoperation ermittelt werden (Polyline, Ellipse, Polygon, usw.), sowie die damit verbundenen Coordinaten.
Grüße, P_G
|
|
P_G 
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: Di 19.10.04 11:34
Keine Vorschläge? Zu schwer für dieses Forum?
Gruß, P_G
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.10.04 11:45
Wenn es so einfach wäre, würdest du wohl nicht fragen, oder?
Das Forum ist schon ganz gut, aber bei solchen Spezialitäten, solltest du vielleicht mal ein bisschen warten können. Es sind leider nicht alle Forums-Mitglieder( über 6000) permanent anwesend. Da kann es schon mal vorkommen, dass die Spezis erst später mal nachschauen, was es neues gibt.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.10.04 12:01
Vielleicht hilft dir dies ja weiter.
|
|
P_G 
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: Di 19.10.04 12:27
Titel: Auf Metafile-Records zugeifen
Danke, Jasocul
Hilft mir bislang leider nicht, da es mir um das Windows Enhanced Metafile und nicht um CGM geht.
Der Grundgedanke ist folgender: Man ruft EnumEnhMetafile auf und übergibt (u.a.) die Callback-function EnHMFEnumProc, welche theoretisch Zugriff auf die einzelnen Records erlaubt. Lediglich das Auslesen der Daten gestaltet sich schwierig, da ich keine entsprechende Dokumentation für einen Delphi-Code vorliegen habe.
Gruß, P_G
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.10.04 12:58
Ist leider nicht mein Spezialgebiet. Ich habe zwar schon mit API-Aufrufen gearbeitet, aber nicht so, dass ich dir hier effektiv weiter helfen könnte.
Aber, wie schon oben gesagt, ein wenig Geduld sollte helfen.
|
|
P_G 
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: Mo 25.10.04 12:32
Ich kann das Problem weiter eingrenzen. Ich erhalte nun für jeden Metafile record die jeweilige Zeichenoperation (im Beispiel unten nur für Polyline16 implementiert) aber die zurückgelieferten Werte für cpts (Größe des Koordinaten-arrays) und apts (Koordinaten-Array) sind vollkommen falsch (um nicht zu sagen bizarr...)
Hat jemand Vorschläge? Diese Sache macht mich langsam verrückt!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| type TSignChunk = record SignOp : string[5]; Data : Array of TPoint; end;
var Form1: TForm1; SignChunk: TSignChunk; SignArray: Array of TSignChunk;
implementation
{$R *.dfm}
function MyEnhMetafileProc(DC: HDC; lpHTable: PHandleTable; lpEMFR: pEnhMetaRecord; nObj: Integer; TheForm:TForm1):Integer; stdcall; var p: PEMRPolyline16; rec: TENHMetaRecord; i: Integer; nb: Integer; begin PlayEnhMetafileRecord(dc, lpHTable^, lpEMFR^,nObj); case lpEMFR^.iType of EMR_Polyline16 : begin p := PEMRPolyLine16(@rec); nb := p.cpts; SetLength(SignArray, Length(SignArray) + 1); SignArray[High(SignArray)].SignOp := 'Pl'; SetLength(SignArray[High(SignArray)].Data, nb); For I := 0 to nb -1 do begin SignArray[High(SignArray)].Data[I] := Point(p.apts[I].X, p.apts[I].y); end; end; end; result := 1; end;
procedure TForm1.Button1Click(Sender: TObject); var MyMetafile: TMetafile; begin MyMetafile := TMetafile.Create; MyMetafile.LoadFromFile('sample.emf'); SignArray := nil; EnumEnhMetafile(Canvas.Handle, MyMetafile.Handle, @MyEnhMetafileProc, self, rect(0, 0, MyMetafile.Width,MyMetafile.Height)); MyMetafile.Free; end; |
Gruß, P_G
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
P_G 
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: Mi 03.11.04 13:11
Habe das Problem gelöst.
P_G
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 03.11.04 13:18
Dann schreib doch wenigstens wie. Dann kann man das nächste mal nach der Lösung suchen und benötigt kein neues Topic.
|
|
apricac
Hält's aus hier
Beiträge: 1
|
Verfasst: Mi 19.01.05 18:18
Ich bin sehr an Deiner Lösung interessiert...
Grüße
Aprica
|
|