Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Hat sich die Zwischenablage geändert? (https://www.delphipraxis.net/3341-hat-sich-die-zwischenablage-geaendert.html)

Pyr0cracker 7. Mär 2003 16:23


Hat sich die Zwischenablage geändert?
 
Ich hab mal ne frage, wie kann ich überprüfen ob sich die zwischenablage geändert hat?

Luckie 7. Mär 2003 17:08

Kuck mal, ob du hier was findest: Clipboard - MSDN

Pyr0cracker 7. Mär 2003 17:58

hmm, da habe ich nichts gefunden

mirage228 23. Mär 2003 19:38

Delphi-Quellcode:
{
PROCEDURE: ClipboardChanged;
-----------------------------
PARAMETER: Keine
-----------------------------
Überprüft, ob Text im Zwischenspeicher liegt
}
procedure ClipboardChanged;
var
  I: Integer;
  Format: Word;
  E: Boolean;
begin
  E := False;
  for I := 0 to Clipboard.FormatCount - 1 do
  begin
    Format := Clipboard.Formats[I];
    if SendMessage(TextEnter.Handle, EM_CANPASTE, Format, 0) <> 0 then
    begin
      E := True;
      Break;
    end;
  end;
Wenn E=True ist, dann ist Text im Zwischenspeicher, sonst nicht ;-)

mirage228

P.S.:
TextEnter ist bei mir ein TRichEdit (also sollteste bei dir was anderes hinschreiben :D)
Du musst die Unit "Clipbrd" einbinden, sonst gehts net

Luckie 23. Mär 2003 19:53

Und wenn sich der Text ändert bekommst du es trotzdem nicht mit.

Du mußt dich in die Clipboard Chain einklinken und beim Beenden deines Programmes wieder ausklinken das bitte sehr sauber, sonst bekommen die Programme die hinter dir in der Chain liege nichts mehr mit, was in der Zwischenablage passiert.

toms 23. Mär 2003 20:24

Zitat:

hmm, da habe ich nichts gefunden
Ich aber:

Zitat:

The SetClipboardViewer function adds the specified window to the chain of clipboard viewers. Clipboard viewer windows receive a WM_DRAWCLIPBOARD message whenever the content of the clipboard changes.

mirage228 24. Mär 2003 05:34

Delphi-Quellcode:
procedure TMain.WMDrawClipboard(var Msg: TWMDrawClipboard);
begin
  SendMessage(FClipboardOwner, WM_DRAWCLIPBOARD, 0, 0);
  Msg.Result := 0;
  ClipboardChanged;
end;

procedure TMain.WMChangeCBChain(var Msg: TWMChangeCBChain);
begin
  if Msg.Remove = FClipboardOwner then FClipboardOwner := Msg.Next
  else SendMessage(FClipboardOwner, WM_CHANGECBCHAIN, Msg.Remove, Msg.Next);
  Msg.Result := 0;
end;
Deklaration:

Delphi-Quellcode:
    procedure WMChangeCBChain(var Msg: TWMChangeCBChain); message WM_CHANGECBCHAIN;
    procedure WMDrawClipboard(var Msg: TWMDrawClipboard); message WM_DRAWCLIPBOARD;
Wichtig: Bei Form.Destroy das einfügen:
Delphi-Quellcode:
  ChangeClipboardChain(Handle, FClipboardOwner);
ich hoffe ma, so gehts


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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