Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 240904 (2340)
  Suchen
 Zurück zur Übersicht
 AutorThema: Texte ins Clipboard
Werner Wesseler
Datum:28.08.02 00:12 Antwortenals Email verschicken  


Hallo Community.

Ich habe ein Richtext-Edit und möchte den ganzen Text kopieren. Per WM_Copy kann ich aber höchstens 32 KB kopieren, obwohl ich die Textgrösse mit EM_ExLimitText heraufgesetzt habe. Ein großer Text wird ja auch korrekt angezeigt, nur nie komplet ins Clipboard kopieret.
Weiß jemand, wie das klappen könnte ?

(Werner)


Horst Horn
Datum:28.08.02 13:01 Antwortenals Email verschicken (info@web-treffpunkt.de) 


Hallo Werner
Hier ist ein Quelltext von Thomas Hölzer. Der dürfte Dein Problem begeben:

' PRFellow-Vorlage
' Autor: Thomas Hölzer,1999
' Text(!)-Daten per API in die Zwischenablage kopieren

Def OpenClipboard(1) !"USER32","OpenClipboard"
Def CloseClipBoard(0) !"USER32","CloseClipboard"
Def SetClipboardData(2) !"USER32","SetClipboardData"

Proc CopyTextToClip
Parameters pointer&
If Neq(OpenClipBoard(GetActiveWindow()),0)
SetClipBoardData(1,pointer&)
CloseClipBoard()
EndIf
EndProc

' Beispiel
''Cls
''Declare buf#
''Dim buf#,1024 ' das wird wohl reichen
''ReadText buf#,"C:\AUTOEXEC.BAT"
''CopyTextToClip buf#
''Dispose buf#
''WinExec("CLIPBRD.EXE",1)
''WaitInput

CU
horst


Frank Abbing
Datum:01.09.02 15:37 Antwortenals Email verschicken  


Hallo,

bin auch gerade dabei, größere Texte aus einem Richedit ins Clipboard zu kopieren und hab' das gleiche Problem.
Horst, dein (oder Thomas's) Quellcode funktioniert aber unter WindowsXP definitiv nicht...
SetClipboardData(...) liefert immer 0 zurück, Fehler ist ein falscher Handle-Typ (Error 6).
Ein Blick in die WinHlp genügt, der erforderliche Speicher muß vom Typ "GMEM_MOVEABLE or GMEM_DDESHARE" (via GlobalAlloc) sein.
Erfüllt Profan's Dim-Befehl diese Voraussetzungen? Anscheinend nicht (Roland?).
Ich hab' momentan das Problem so gelöst:

Def GlobalAlloc(2) !"KERNEL32","GlobalAlloc"
Def GlobalLock(1) !"KERNEL32","GlobalLock"

x&=SendMessage(richedit&,$0E,0,0)
alloc&=GlobalAlloc($2042,x&+16)
mem&=GlobalLock(alloc&)
SendMessage(richedit&,$000D,x&+1,mem&)
If Neq(OpenClipboard(GetActiveWindow()),0)
  EmptyClipboard()
  SetClipboardData(1,mem&)
  CloseClipBoard()
  SetFocus(%hwnd)
EndIf

SetClipboardData(...) arbeitet jetzt korrekt, der Quellcode ebenfalls. Der Speicher braucht von uns auch nicht wieder freigegeben zu werden.
Der Text wird jetzt ins Clipboard kopiert, allerdings immer noch maximal 32 KB... grrrr ...

Hat jemand eine Idee?

Gruß, Frank


Frank Abbing
Datum:02.09.02 16:41 Antwortenals Email verschicken  


Hallo,

ok, hab' die 32 KB Grenze jetzt überwunden, es lag an Paste... Das Paste meines Editors kann wohl nicht mehr kopieren als maximal 32 KB Text...grrmmpf...

Ändert aber nichts daran, das die PrFellow-Vorlage unter Windows XP nicht funktioniert!

Roland: Welchen Speichertyp allokiert Dim denn jetzt ?

Gruß, Frank


Sven Schmidts
Datum: 03.09.02 08:37 Antwortenals Email verschicken (schmidts@flat2serv.de) 


> Roland: Welchen Speichertyp allokiert Dim denn jetzt ?

Den DDR-RAM ;)
Sven


 Zurück zur Übersicht