AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi AV "Kann Zwischenablage nicht öffnen"
Thema durchsuchen
Ansicht
Themen-Optionen

AV "Kann Zwischenablage nicht öffnen"

Ein Thema von jensw_2000 · begonnen am 23. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

Re: AV "Kann Zwischenablage nicht öffnen"

  Alt 24. Aug 2004, 01:16
Jetzt klapps ...

In TClipboard.open darf FClipboardWindow nicht das Application.Handle zugewiesen werden.
Wenn FClipboardWindow = 0 ist und somit AllocateHWnd(MainWndProc) verwendet wird, dann kann man die Zwischenablage mit anderen Anwendungen lesend und schreibend teilen ...


Da ich definitiv nicht genug von der Materie verstehe, habe ich die Clipbrd.pas im Originalzustand belassen, in myClipbrd.pas kopiert und dann in mein Project eingebunden.

In die CodeLib möchte ich das nicht posten, bevor sich das jemand angesehen hat der mehr davon versteht als ich. Der Code den man da findet funktioniert ...
Den Ruf will ich versauen ...

Die myclipbrd.pas hänge ich hier einfach an den Thread.

Kurz zu den Veränderungen:

1. Prvate Variable FNullhandle definiert

Code:
type
  TClipboard = class(TPersistent)
  private
    FOpenRefCount: Integer;
    FClipboardWindow: HWND;
    FAllocated: Boolean;
    FEmptied: Boolean;
    FNullHandle:HWND; //---- Edit (hinzugefügt) ----
2. constructor überschrieben, FNullHandle:=0 definiert
Code:
constructor TClipboard.create; //---- Edit (hinzugefügt) ----

begin

  FNullHandle:=0;
  inherited Create;

end;
3. in TClipboard.open FClipboardWindow:=FNullHandle definiert damit Zwischenablage dem Owner AllocateHWnd(MainWndProc) zugewiesen wird

Code:
procedure TClipboard.Open;
begin

  if FOpenRefCount = 0 then
  begin
    FClipboardWindow := FNullHandle;  //---- Edit (von Application.Handle in FNullHandle geändert) ----
    if FClipboardWindow = 0 then
    begin
{$IFDEF MSWINDOWS}
      FClipboardWindow := Classes.AllocateHWnd(MainWndProc);
{$ENDIF}
{$IFDEF LINUX}
      FClipboardWindow := WinUtils.AllocateHWnd(MainWndProc);
{$ENDIF}
      FAllocated := True;
    end;
    if not OpenClipboard(FClipboardWindow) then
      raise Exception.CreateRes(@SCannotOpenClipboard);
    FEmptied := False;
  end;
  Inc(FOpenRefCount);
end;


Schöne Grüße,
Jens
Angehängte Dateien
Dateityp: pas myclipbrd.pas (13,3 KB, 17x aufgerufen)
  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 09:55 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 by Thomas Breitkreuz