![]() |
Zwischenablage auslesen - kein Bild, kein einfacher Text, ..
Moin,
folgendes Anliegen. Ich möchte die Zwischenablage auslesen... Ich benutze unter anderem das Programm EasyGPS und dort kann ich einen Wegpunkt in die Zwischenablage kopieren. Diesen kann ich jedoch nicht in einen Text-Editor einfügen und auch die Zwischenablage-Anzeige von Windows kann damit nichts anfangen. Ich kann ihn nur wieder in EasyGPS einfügen. Mit Delphi habe ich schon einiges versucht und auch im Forum geschaut, aber ich bin noch nicht an den Inhalt gekommen. Es ist kein einfacher Text, denn sonst würde das ja gehen... Wie kann ich mit Delphi (oder notfalls Alternativen) auf die Zwischenablage zugreifen, wenn dort etwas anderes drin ist als z.B. Text oder Bilder? Gruß Ben |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
mir fällt da spontan die unit Clipbrd ein....
edit: zusätzlich schau dir mal die "FORMATETC" struktur an. |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Guten Morgen Ben,
das ClipBoard-Format von EasyGPS ist XML. Ich kann es so auslesen:
Delphi-Quellcode:
Grüße vom marabu
uses
ClipBrd, Msxml2; const CF_GPX = 49628; function LoadXmlFromClipboard(doc: IXMLDOMDocument2; cf: Word): Boolean; var ch: THandle; pwc: PWideChar; begin Result := ClipBoard.HasFormat(cf); if Result then begin ClipBoard.Open; try ch := Clipboard.GetAsHandle(cf); pwc := GlobalLock(ch); Result := doc.loadXML(WideCharToString(pwc)); GlobalUnlock(ch); finally Clipboard.Close; end; end; end; procedure TDemoForm.ButtonClick(Sender: TObject); var doc: IXMLDOMDocument2; begin doc := CoDOMDocument40.Create; doc.async := False; if LoadXmlFromClipboard(doc, CF_GPX) then ShowMessage(doc.xml); doc := nil; end; |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Danke marabu,
leider kenne ich mich noch nicht so viel mit XML aus. Ich habe MSXML 4.0 SP 2 installiert, aber Delphi meckert immer noch (Datei nicht gefunden: Msxml2.dcu). Hast du eine Tipp für mich? Gruß Ben P.S.: Delphi 5 Standard, Win XP P.P.S.: Müsste es nicht auch erst einmal ohne XML gehen? Ich weiß, dass wäre nicht schlau, wenn man mit diesen Daten weiterarbeiten möchte, aber könnte ich mir nicht den "XML-Code" anzeigen lassen, ohne mit XML Komponenten zu arbeiten? |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Hallo Ben,
klar kannst du dir das XML-Dokument auch als String besorgen:
Delphi-Quellcode:
Die Unit MSXML2 kannst du dir über
function ClipboardXmlToStr(cf: Word): string;
var ch: THandle; pwc: PWideChar; begin if ClipBoard.HasFormat(cf) then begin ClipBoard.Open; try ch := Clipboard.GetAsHandle(cf); pwc := GlobalLock(ch); Result := WideCharToString(pwc); GlobalUnlock(ch); finally Clipboard.Close; end; end else Result := ''; end; ![]() Freundliche Grüße |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
So in der Art hatte ich das schon mal probiert. Mein Problem war und ist weiterhin nur. Was übergeben ich an "Clipboard.GetAsHandle(???)".
In deinem ersten Code hast du "CF_GPX" übergeben, aber das kennt Delphi bei mir nicht. In der Hilfe bei "TClipboard.GetAsHandle" steht: "... Die Methode HasFormat führt einige verfügbare Formate auf, die für den Parameter Format verwendet werden können. Zusätzlich können Anwendungen eigene Formate definieren und registrieren. Nähere Informationen hierzu finden Sie in der Windows-API-Hilfe." Ich habe im Internet danach gesucht, um eigene Formate zu definieren oder zu erfahren, welche es alle gibt, aber habe nichts entsprechendes gefunden. Was muss ich dort übergeben oder wo finde ich weitere Informationen? Gruß Ben P.S.: Delphi 5 Standard, Win XP |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Schau dir mal mein Open Source Programm Clipboard Explorer an.
![]() Damit sollte es kein Problem sein, die verschiedenen Datenformate in der Zwischenablage anzuzeigen. |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Hallo,
Zitat:
Delphi-Quellcode:
Gruß
const
CF_GPX = 49628; xaromz |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Man darf das Clipboard-Format nicht als hartcodierte Nummer verwenden, sondern muss
die Funktion RegisterClipboardFormat() verwenden:
Delphi-Quellcode:
Es gibt übrigens keine Funktion, um das Clipboard-Format zu deregistrieren.
var
CF_GPX: Word; // globale Variable initialization // Falls EasyGPS das Format schon registriert hat, bekommen wir hier den // gleichen Wert, den auch EasyGPS verwendet CF_GPX := RegisterClipboardFormat(PChar('GPX')); if CF_GPX=0 then RaiseLastWin32Error; |
Re: Zwischenablage auslesen - kein Bild, kein einfacher Text
Hallo Andreas,
da ich den Formatbezeichner nicht kannte, habe ich den Formatcode ermittelt und als Konstante verwendet um auf die Daten zugreifen zu können. Da mich das Installieren von EasyGPS schon mehr Zeit gekostet hat als ich eigentlich investieren wollte, sei mir dieser Kunstgriff verziehen. Im Nachhinein habe ich die Konstante CF_GPX genannt, weil mir das irgendwie naheliegend erschien. Wenn der Formatbezeichner wirklich GPX ist, dann ist das Zufall. Wenn es also trotz RegisterClipBoardFormat() nicht klappt, dann hast du dich von meinem Konstantennamen CF_GPX in die Irre führen lassen. Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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