Как работать с буфером обмена (Clipboard)
Собираются программисты встречать новый год. Уже разлили пиво (по бокалам - а вы что подумали?), и тут один говорит: - Я хочу произнести тост. Давайте выпьем за моего злейшего врага. И пусть в новом году у него денег будет в десять раз больше, чем у меня! И, обведя взглядом недоуменные лица окружающих, добавляет: - За Билла Гейтса! |
Этот пример использует картинку, кнопку и компонент shape на форме. Когда пользователь кликает по кнопке, то изображение формы сохраняется в в переменной FormImage и копируется в буфер обмена (Clipboard). Затем изображение формы копируется обратно в компонент картинки, тем самым создавая интересный эффект, особенно, если кнопку понажимать несколько раз.
procedure TForm1.Button1Click(Sender: TObject); var FormImage: TBitmap; begin FormImage := GetFormImage; try Clipboard.Assign(FormImage); Image1.Picture.Assign(Clipboard); finally FormImage.Free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Shape1.Shape := stEllipse; Shape1.Brush.Color := clLime; Image1.Stretch := True; end; |
Следующий пример копирует содержимое экрана в буфер обмена:
procedure CopyScreenToClipboard; var dx,dy: integer; hSourcDC, hDestDC, hBM, hbmOld: THandle; begin dx := screen.width; dy := screen.height; hSourcDC := CreateDC('DISPLAY', nil, nil, nil); hDestDC := CreateCompatibleDC(hSourcDC); hBM := CreateCompatibleBitmap(hSourcDC, dx, dy); hbmold:= SelectObject(hDestDC, hBM); BitBlt(hDestDC, 0, 0, dx, dy, hSourcDC, 0, 0, SRCCopy); OpenClipBoard(form1.handle); EmptyClipBoard; SetClipBoardData(CF_Bitmap, hBM); CloseClipBoard; SelectObject(hDestDC,hbmold); DeleteObject(hbm); DeleteDC(hDestDC); DeleteDC(hSourcDC); end; |
Далее: Как скопировать выбранные в DBGrid записи в клипборд »»