![]() |
Clipboard Fehler
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:
Funktioniert auch recht gut...
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; ...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:
Zitat:
mfg.Dominik |
Re: Clipboard Fehler
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 |
Re: Clipboard Fehler
Zitat:
Das ist mir schon frueher aufgefallen und Dein Fehler laesst sich voll nachvollziehen... :-( |
Re: Clipboard Fehler
Hallo,
hab nochmal deine Code durchgesehen. vielleicht solltest du prüfen, ob überhaupt Text in der Zwischenablage drin ist.
Delphi-Quellcode:
du musst natürlich CF_TEXT nehmen.
if Clipboard.HasFormat(CF_BITMAP) then begin
CopyBmpFromClipboard; mfg DerDan |
Re: Clipboard Fehler
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:
![]() |
Re: Clipboard Fehler
Du musst prüfen, ob im Clipboard etwas drin ist.
Wenn nix drin ist, schmeisst AsText eine Exception. Siehe Delphi-Hilfe bei TClipboard.AsText... |
Re: Clipboard Fehler
Danke erstmal für eure Antworten :hello:
:arrow: Das mit der ClipboardChain hatte ich schon ausprobiert ( ![]() :arrow: Ich hab den Timer jetzt mal so umgeändert:
Delphi-Quellcode:
-> gleicher Fehler :(
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; :arrow: Ü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? |
Re: Clipboard Fehler
Schau Dir das Programm von Luckie nochmal an.
Das funktioniert und ist viel schneller. |
Re: Clipboard Fehler
ok, angeschaut -> abgeschrieben -> geht :angel2:
Delphi-Quellcode:
Thx @ all (und besonders an Luckie^^) :cheers:
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; :dp: |
Re: Clipboard Fehler
Zitat:
Abschreiben alleine reicht ja nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 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