Общие вопросы
Code: |
uses Clipbrd;
procedure ListBoxToClipboard(ListBox: TListBox; BufferSize: Integer; CopyAll: Boolean); var Buffer: PChar; Size: Integer; Ptr: PChar; I: Integer; Line: string[255]; Count: Integer; begin if not Assigned(ListBox) then Exit;
GetMem(Buffer, BufferSize); Ptr := Buffer; Count := 0; for I := 0 to ListBox.Items.Count - 1 do begin Line := ListBox.Items.strings[I]; if not CopyAll and ListBox.MultiSelect and (not ListBox.Selected[I]) then Continue; { Check buffer overflow } Count := Count + Length(Line) + 3; if Count = BufferSize then Break; { Append to buffer } Move(Line[1], Ptr^, Length(Line)); Ptr := Ptr + Length(Line); Ptr[0] := #13; Ptr[1] := #10; Ptr := Ptr + 2; end; Ptr[0] := #0; ClipBoard.SetTextBuf(Buffer); FreeMem(Buffer, BufferSize); end;
procedure ClipboardToListBox(ListBox: TListbox); begin if not Assigned(ListBox) then Exit;
if not Clipboard.HasFormat(CF_TEXT) then Exit;
Listbox.Items.Text := Clipboard.AsText; end;
//Copy all items from Listbox1 to the clipboard procedure TForm1.Button1Click(Sender: TObject); begin ListBoxToClipboard(ListBox1, 1024, True); end;
//Paste items in clipboard to Listbox2 procedure TForm1.Button2Click(Sender: TObject); begin ClipboardToListBox(Listbox2); end;
//Copy only selected items from Listbox1 to the clipboard procedure TForm1.Button3Click(Sender: TObject); begin ListBoxToClipboard(Listbox1, 1024, False); end; |
- Подробности
- Родительская категория: Буфер обмена
- Категория: Общие вопросы
Мне нужно использовать clipboard для сохранения данных в собственном формате и я хочу для этого написать набор процедур ввода/вывода с использованием потоков (streams). Возможно ли создать объект TMemoryStream, эаполнить его и поместить в Clipboard?
Hе только возможно, именно так поступают функции Clipboard.GetComponent и Clipboard.SetComponent. Сначала вы должны зарегистрировать свой собственный формат данных для Clipboard с помощью функции RegisterClipboardFormat:
- Подробности
- Родительская категория: Буфер обмена
- Категория: Общие вопросы
Code: |
//Ctrl+C, Strg+C:
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0); keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
//Ctrl+V, Strg+V:
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0); keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) |
- Подробности
- Родительская категория: Буфер обмена
- Категория: Общие вопросы
Страница 2 из 2