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 Clipboard "selber schreieben" (https://www.delphipraxis.net/82581-clipboard-selber-schreieben.html)

xZise 15. Dez 2006 22:11


Clipboard "selber schreieben"
 
Da die Clipboard-Klasse mein Programm regelrecht aufbläht (82 KB auf 3XX KB), habe ich hier nach eigenen Clipboards gesucht.
Und ich bin auch fündig geworden:

[nonVCL] Send to Clipboard as Name - Eigenbau


Funktionier soweit auch ganz gut, nur wollte ich gerne die Funktion vor allen anderen Aufrufen, also so ähnloich wie das:
Delphi-Quellcode:
  if ParamCount > 0 then

    CopyTextToClipboard({???}, PChar(ParamStr(1))); // <!---
    //\\ ***** //\\

  if (not FileExists(ParamStr(1))) or (ParamCount = 0) then begin
    wc.hInstance := hInstance;
    wc.hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(100));
    wc.hCursor := LoadCursor(0, IDC_ARROW);
    wc.hbrBackground := GetSysColorBrush(COLOR_3DFACE);

    RegisterClassEx(wc);

    CreateWindowEx(WS_EX_TOOLWINDOW or WS_EX_APPWINDOW, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 119, 103, 0, 0, hInstance, nil);

    while GetMessage(msg,0,0,0) do begin
      TranslateMessage(msg);
      DispatchMessage(msg);
    end;

    ExitCode := msg.wParam;
  end;
Das Problem ist nun, dass diese Funktion 2 Parameter erwartet, ich aber nur den 2. liefern kann...
Wie kann ich nun die Funktion umschreiben, dass sie auch ohne der "hWnd" funktiniert?

Luckie 15. Dez 2006 22:19

Re: Clipboard "selber schreieben"
 
Du kannst mal probieren, was passiert, wenn du da 0 angibst. Allerdings wird das Handle gebraucht, um das Fenster in die ClipboardChain einzureihen. Und ich bin nicht sicher, ob und was da passiert, wenn man dies nicht tut. Andere Programme könnten sich dann bei Kopiervorgängen über die Zwischenablage unter Umständen abnormal verhalten.

xZise 15. Dez 2006 22:42

Re: Clipboard "selber schreieben"
 
Okay danke Luckie ;) Das funktioniert wunderbar :P

Luckie 15. Dez 2006 22:49

Re: Clipboard "selber schreieben"
 
Nun ja:
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.
Zitat:

The windows that are part of the clipboard viewer chain, called clipboard viewer windows, must process the clipboard messages WM_CHANGECBCHAIN and WM_DRAWCLIPBOARD. Each clipboard viewer window calls the SendMessage function to pass these messages to the next window in the clipboard viewer chain.
Ich hoffe nur, dass du damit die ClipboardChein nicht durcheinander brings.

Auf der andern Seite stellt sich die Frage, ob dein Programm überhaupt in die Kette aufgenommen werden muss.

Reinhard Kern 16. Dez 2006 13:09

Re: Clipboard "selber schreieben"
 
Zitat:

Zitat von xZise
Da die Clipboard-Klasse mein Programm regelrecht aufbläht (82 KB auf 3XX KB), habe ich hier nach eigenen Clipboards gesucht.
Und ich bin auch fündig geworden:

[nonVCL] Send to Clipboard as Name - Eigenbau


Funktionier soweit auch ganz gut, nur wollte ich gerne die Funktion vor allen anderen Aufrufen, also so ähnloich wie das:
Delphi-Quellcode:
  if ParamCount > 0 then

    CopyTextToClipboard({???}, PChar(ParamStr(1))); // <!---
    //\\ ***** //\\

  if (not FileExists(ParamStr(1))) or (ParamCount = 0) then begin
    wc.hInstance := hInstance;
    wc.hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(100));
    wc.hCursor := LoadCursor(0, IDC_ARROW);
    wc.hbrBackground := GetSysColorBrush(COLOR_3DFACE);

    RegisterClassEx(wc);

    CreateWindowEx(WS_EX_TOOLWINDOW or WS_EX_APPWINDOW, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 119, 103, 0, 0, hInstance, nil);

    while GetMessage(msg,0,0,0) do begin
      TranslateMessage(msg);
      DispatchMessage(msg);
    end;

    ExitCode := msg.wParam;
  end;
Das Problem ist nun, dass diese Funktion 2 Parameter erwartet, ich aber nur den 2. liefern kann...
Wie kann ich nun die Funktion umschreiben, dass sie auch ohne der "hWnd" funktiniert?

Hallo,

es wäre doch auch kein Problem, wenn du die Funktion erst nach der Konstruktion deines Fensters aufrufst. Die Funktion bleibt die gleiche, ausser wenn das Programm mit ungültigen Parametern aufgerufen wird, und was sollen die im Clipboard? Ausserdem kannst du das Abspeichern ja auch noch in einem Else-Zweig aufrufen, wenn es doch sein muss.

Gruss Reinhard

xZise 16. Dez 2006 13:17

Re: Clipboard "selber schreieben"
 
Es geht hier in erster Linie um Performance, weil er garnicht das fenster anzeigen soll, wenn alles wunderbar ist ;)
Und deshalb wollte ich, wenn alles wunderbar ist, dass er da nur das einzige macht, was er da machen muss:
Den Parameter in das Clipboard zu schreiben (auch ein grund, warum ich es nonVCL geschrieben habe)...


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