AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zwischenablage auslesen - kein Bild, kein einfacher Text, ..
Thema durchsuchen
Ansicht
Themen-Optionen

Zwischenablage auslesen - kein Bild, kein einfacher Text, ..

Ein Thema von benst · begonnen am 29. Jul 2007 · letzter Beitrag vom 31. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#1

Zwischenablage auslesen - kein Bild, kein einfacher Text, ..

  Alt 29. Jul 2007, 23:29
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
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 29. Jul 2007, 23:39
mir fällt da spontan die unit Clipbrd ein....

edit: zusätzlich schau dir mal die "FORMATETC" struktur an.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 08:00
Guten Morgen Ben,

das ClipBoard-Format von EasyGPS ist XML. Ich kann es so auslesen:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#4

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 10:00
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 10:08
Hallo Ben,

klar kannst du dir das XML-Dokument auch als String besorgen:

Delphi-Quellcode:
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;
Die Unit MSXML2 kannst du dir über TLIBIMP erzeugen.

Freundliche Grüße
  Mit Zitat antworten Zitat
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#6

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 17:04
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 17:13
Schau dir mal mein Open Source Programm Clipboard Explorer an.
http://www.delphipraxis.net/internal...ct.php?t=59549
Damit sollte es kein Problem sein, die verschiedenen Datenformate in der Zwischenablage anzuzeigen.
Andreas
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 17:44
Hallo,
Zitat von benst:
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.
den Wert hat marabu aber in Quellcode definiert:
Delphi-Quellcode:
const
  CF_GPX = 49628;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 30. Jul 2007, 17:57
Man darf das Clipboard-Format nicht als hartcodierte Nummer verwenden, sondern muss
die Funktion RegisterClipboardFormat() verwenden:
Delphi-Quellcode:
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;
Es gibt übrigens keine Funktion, um das Clipboard-Format zu deregistrieren.
Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Zwischenablage auslesen - kein Bild, kein einfacher Text

  Alt 31. Jul 2007, 09:07
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz