AGB  ·  Datenschutz  ·  Impressum  







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

Clipboard Fehler

Ein Thema von dominikkv · begonnen am 7. Feb 2008 · letzter Beitrag vom 1. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Clipboard Fehler

  Alt 7. Feb 2008, 13:25
Hi

Ich will das Clipboard überwachen und bei Änderungen den Text auswerten.
Ich hab mir also nen Timer geschnappt der jede Sekunde das ausführt:
Delphi-Quellcode:
uses
  {...}, clipbrd, {...}

procedure TfMain.tmrClipboardTimerTimer(Sender: TObject);
begin
  if oldClipboardText <> Clipboard.AsText then
    begin
      oldClipboardText := Clipboard.AsText;
      if chk1.Checked then
        ClipboardChanged(oldClipboardText);
    end;
end;
Funktioniert auch recht gut...
...aber!

Wenn ich nun Outlook starte, ne E-mail öffne und nen Textausschnitt in die Zwischenablage kopiere wird wie gewollt meine procedure ClipboardChanged ausgeführt.
Nun schließe ich Outlook wieder und bekomme in meinem Programm den Fehler:
Zitat:
exception class : Exception
exception message : Zwischenablage kann nicht geöffnet werden.
Und hier noch der Stack:
Zitat:
main thread ($1188):
0047e1ff +04b MyProg.exe Clipbrd TClipboard.Open
0047e241 +011 MyProg.exe Clipbrd TClipboard.GetAsText
004b3fd8 +020 MyProg.exe uMain 131 +1 TfMain.tmrClipboardTimerTimer
0047d097 +01b MyProg.exe ExtCtrls 2281 +1 TTimer.Timer
0047cf03 +02f MyProg.exe ExtCtrls 2239 +4 TTimer.WndProc
...
Hat jemand ne Idee woran das liegt?

mfg.Dominik
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Clipboard Fehler

  Alt 7. Feb 2008, 13:40
Hallo:

Es gibt auch eine Event, welches Ausgelöst wird, wenn sich der Inhalt des clipboards ändert:
Damit deine Applikation dieses Event bekommt muss sie sich als Clipboard Viewer im Betriebssystem anmelden.

such mal nach

SetClipboardViewer
WM_CHANGECBCHAIN
WM_DRAWCLIPBOARD

im Win32 API

auf das Event "WM_DRAWCLIPBOARD" hin kannst du den Inhalt prüfen und kopieren.

hab mal was für Bitmaps geschrieben hat gut funktioniert.

Vielleicht behebt die Umstellung von Pollen auf Events auch dein Problem mit den Exceptiones.

mfg

derDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#3

Re: Clipboard Fehler

  Alt 7. Feb 2008, 13:43
Zitat von dominikkv:
Hi
[...]
Hat jemand ne Idee woran das liegt?

mfg.Dominik
Daran dass MS-Anwendungen komische dinge mit dem Clipboard veranstalten.
Das ist mir schon frueher aufgefallen und Dein Fehler laesst sich voll nachvollziehen... :-(
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Clipboard Fehler

  Alt 7. Feb 2008, 13:44
Hallo,

hab nochmal deine Code durchgesehen. vielleicht solltest du prüfen, ob überhaupt Text in der Zwischenablage drin ist.

Delphi-Quellcode:
  if Clipboard.HasFormat(CF_BITMAP) then begin
    CopyBmpFromClipboard;
du musst natürlich CF_TEXT nehmen.


mfg


DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Clipboard Fehler

  Alt 7. Feb 2008, 13:44
Das macht man nicht mit einem Timer, sondern man hängt sich in die ClipboardChain ein, um bei Änderungen benachrichtigt zu werden. Siehe dazu mein Programm ClipView: http://www.michael-puff.de/Developer/Delphi/Programme/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Clipboard Fehler

  Alt 7. Feb 2008, 13:46
Du musst prüfen, ob im Clipboard etwas drin ist.
Wenn nix drin ist, schmeisst AsText eine Exception.

Siehe Delphi-Hilfe bei TClipboard.AsText...
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Clipboard Fehler

  Alt 7. Feb 2008, 14:08
Danke erstmal für eure Antworten

Das mit der ClipboardChain hatte ich schon ausprobiert (Clipboard Viewer), allerdings braucht der so ca 5 Sekunden bis er sich da eingeklinkt hat... zu lange!

Ich hab den Timer jetzt mal so umgeändert:
Delphi-Quellcode:
procedure TfMain.tmrClipboardTimerTimer(Sender: TObject);
begin
  if Clipboard.HasFormat(CF_TEXT) then
    if oldClipboardText <> Clipboard.AsText then
      begin
        oldClipboardText := Clipboard.AsText;
        if chk1.Checked then
          ClipboardChanged(oldClipboardText);
      end;
end;
-> gleicher Fehler

Überprüfen ob in der Zwischenablage nix drinnsteht geht ja schlecht... dazu müsste ich auf Clipboard.AsText zugreifen...
Außerdem habe ich keine entsprechende Methode dafür gefunden.
Außerdem ist nach dem Schließen von Outlook der Text in der Zwischenablage noch vorhanden (Paste in Editor geht)

Wäre es ne Lösung den Zugriff mit try...except zu klammern?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Clipboard Fehler

  Alt 7. Feb 2008, 14:17
Schau Dir das Programm von Luckie nochmal an.
Das funktioniert und ist viel schneller.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Clipboard Fehler

  Alt 7. Feb 2008, 14:56
ok, angeschaut -> abgeschrieben -> geht

Delphi-Quellcode:
 TfMain = class(TForm)
  private
    hNextViewer: DWORD;
  protected
    procedure WMChangeCBChain(var Msg: TMessage); message WM_CHANGECBCHAIN;
    procedure WMDrawClipboard(var Msg: TMessage); message WM_DRAWCLIPBOARD;
  end;


  // FormCreate:
  hNextViewer := SetClipBoardViewer(Handle);

  // FormDestroy:
  ChangeClipBoardChain(Handle, hNextViewer);


procedure TfMain.WMChangeCBChain(var Msg: TMessage);
begin
  if Msg.WParam = hNextViewer then
    hNextViewer := Msg.lParam
  else if hNextViewer <> 0 then
    SendMessage(hNextViewer, MSG.Msg, MSG.wParam, MSG.lParam);
end;

procedure TfMain.WMDrawClipboard(var Msg: TMessage);
var
  hClipbrdObj: THandle;
  pClipbrdObj: Pointer;
begin
  OpenClipboard(Handle);
  hClipbrdObj := GetClipboardData(CF_TEXT);
  if hClipbrdObj <> 0 then
    begin
      pClipbrdObj := GlobalLock(hClipbrdObj);
      if chk1.Checked then
        ClipboardChanged(PChar(pClipbrdObj));
    end;
  GlobalUnlock(DWORD(pClipbrdObj));
  GlobalFree(hClipbrdObj);
  CloseClipBoard;
end;
Thx @ all (und besonders an Luckie^^)

Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Clipboard Fehler

  Alt 7. Feb 2008, 15:00
Zitat von dominikkv:
ok, angeschaut -> abgeschrieben -> geht
Hast Du auch kapiert, was da gemacht wird?
Abschreiben alleine reicht ja nicht.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  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 13:36 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