Показать сообщение отдельно
Старый 09.06.2010, 16:17   #12
Venom2
 
Сообщений: n/a
Ответ: Буффер обмена

Если нужна работа только с текстом, то можно напрямую winapi юзать
Const GMEM_MOVEABLE% = 2
Const CF_TEXT% = 1

Function ClearClipboard()
	If OpenClipboard(SystemProperty("AppHWND")) Then
		EmptyClipboard()
		CloseClipboard()
	EndIf
End Function

Function SetClipboardText(value$)
	Local length%, bank%, memory%, temp%
	If OpenClipboard(SystemProperty("AppHWND")) Then
		EmptyClipboard()
		length = Len(value)
		If length > 0 Then
			length = length + 2
			bank = CreateBank(length)
			If bank Then
				temp = length - 1
				Repeat
					PokeByte(bank, temp - 1, Asc(Mid(value, temp)))
					temp = temp - 1
				Until temp <= 0
				memory = GlobalAlloc(GMEM_MOVEABLE, length)
				If memory Then
					temp = GlobalLock(memory)
					MoveMemoryFromBank(temp, bank, length)
					GlobalUnlock(memory)
					SetClipboardData(CF_TEXT, memory)
				EndIf
				FreeBank(bank)
			EndIf
		EndIf
		CloseClipboard()
	EndIf
End Function

Function GetClipboardText$()
	Local value$, memory%, length%, bank%, address%
	value = ""
	If OpenClipboard(SystemProperty("AppHWND")) Then
		memory = GetClipboardData(CF_TEXT)
		If memory Then
			length = GlobalSize(memory)
			If length > 2 Then
				length = length - 2
				bank = CreateBank(length)
				If bank Then
					address = GlobalLock(memory)
					MoveMemoryToBank(bank, address, length)
					GlobalUnlock(memory)
					Repeat
						length = length - 1
						value = Chr(PeekByte(bank, length)) + value
					Until length <= 0
					FreeBank(bank)
				EndIf
			EndIf
		EndIf
		CloseClipboard()
	EndIf
	Return value
End Function

SetClipboardText("Hello World!")
Print GetClipboardText()
ClearClipboard()
Print GetClipboardText()

WaitKey()
End
Ну а картинки лучше в памяти колбасить (структура буфера известна, блок памяти дернуть не проблема, через формат CF_DIB с построением структуры BITMAPINFO по данным того же буфера) и это да, уже только через dll

ЗЫ
Чуть не забыл деклс
.lib "user32.dll"

OpenClipboard%(window%)
CloseClipboard()
EmptyClipboard()
SetClipboardData(type%, data%)
GetClipboardData%(type%)

.lib "kernel32.dll"

GlobalAlloc%(flags%, bytes%)
GlobalFree(handle%)
GlobalLock%(handle%)
GlobalUnlock(handle%)
GlobalSize%(handle%)
MoveMemoryFromBank(destination%, source*, length%):"RtlMoveMemory"
MoveMemoryToBank(destination*, source%, length%):"RtlMoveMemory"
 
Ответить с цитированием