AGB  ·  Datenschutz  ·  Impressum  







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

Clipboard "selber schreieben"

Ein Thema von xZise · begonnen am 15. Dez 2006 · letzter Beitrag vom 16. Dez 2006
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Clipboard "selber schreieben"

  Alt 15. Dez 2006, 22:11
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?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Clipboard "selber schreieben"

  Alt 15. Dez 2006, 22:19
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Clipboard "selber schreieben"

  Alt 15. Dez 2006, 22:42
Okay danke Luckie Das funktioniert wunderbar
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Clipboard "selber schreieben"

  Alt 15. Dez 2006, 22:49
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: Clipboard "selber schreieben"

  Alt 16. Dez 2006, 13:09
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
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Clipboard "selber schreieben"

  Alt 16. Dez 2006, 13:17
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)...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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:18 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