Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Clipboard (https://www.delphipraxis.net/42088-clipboard.html)

Nisbo 13. Mär 2005 13:39


Clipboard
 
Moin Moin,

ich mal wieder, hoffe es nervt nicht allzu doll :cyclops:

Folgendes Problem, da ic ja gerade mit meiner Icongeschichte nicht weiterkomme wollte ich am Editorbereich weiterbasteln und den Inhalt von Memo2 in die Zwischenablage kopieren, allerdings will das nicht so richtig

Delphi-Quellcode:
     if ClipBoard.HasFormat(CF_TEXT) then Showmessage('Text!'); // nur zum testen
     
     Memo2.SetFocus;
     Memo2.SelectAll;
     Memo2.CopyToClipBoard;
     
     ClipBoard.AsText := Memo2.Text;
Set.Focus und SelectAll funktioniert ohne Probleme, nur in die Zwischenablage wird nichts eingefügt, allerdings wird die Zwischenablage überschrieben wenn vorher was drinn war

was habe ich denn jetzt falsch gemacht ?

Christian Seehase 13. Mär 2005 14:03

Re: Clipboard
 
Moin Jens,

ich habe das mal mit Lazarus 0.9.4. beta, und D5 Pro nachgestellt

(nur diese Zeilen:
Delphi-Quellcode:
     Memo1.SetFocus;
     Memo1.SelectAll;
     Memo1.CopyToClipBoard;
)

Bei D5 Pro: OK
Bei Lazarus: Der beschriebene Effekt.

Bug in Lazarus, bzw. FreePascal-Compiler?

Nisbo 13. Mär 2005 14:11

Re: Clipboard
 
ach menno, so macht das alles keinen spaß mehr wenn so viele sachen nicht funktionieren in Lazarus :(
habe leider keine 1300 EUR für delphie und die Freeversion davon darf man ja nichts veröffentlichen :(

@ Christian Seehase

hast du eventuell noch ne andere Idee wie ich den Text in die Zwischenablage kopieren kann ?

Christian Seehase 13. Mär 2005 14:18

Re: Clipboard
 
Moin Jens,

ja hab' ich.
Sozusagen "zu Fuss", also einfach mit den zugrundeliegenden API-Funktionen:

Delphi-Quellcode:
function StringToClipboard(const AsString : string) : integer;

var
  hMem : cardinal;
  pMem : PChar;

begin
  Result := ERROR_SUCCESS;
  if not OpenClipboard(0) then begin
    Result := GetLastError;
    exit;
  end;
  try
    if not EmptyClipboard then begin
      Result := GetLastError;
      exit;
    end;
    hMem := GlobalAlloc(GMEM_MOVEABLE,Length(AsString)+1);
    if hMem = 0 then begin
      Result := GetLastError;
      exit;
    end;
    pMem := GlobalLock(hMem);
    if pMem = nil then begin
      Result := GetLastError;
      exit;
    end;
    try
      CopyMemory(pMem,PChar(AsString+#00),Length(AsString)+1);
    finally
      if not GlobalUnlock(hMem) then Result := GetLastError;
    end;
    if SetClipboardData(CF_TEXT,hMem) = 0 then begin
      Result := GetLastError;
      exit;
    end;
  finally
    if not CloseClipboard then Result := GetLastError;
  end;
end;
Sollte so funktionieren, aber schau Dir auf jeden Fall auch mal im MSDN die jeweiligen API-Funktionen an.
Die Funktion ist über 2 Jahre alt, und könnte vielleicht mal überarbeitet werden ;-)

Nisbo 13. Mär 2005 14:26

Re: Clipboard
 
vielen dank, funktioniert astreis :)


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