Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2016, 08:55   #1
krGorka
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 35
По умолчанию clipboard

Подскажите, как решить такую проблему: была WinXP, Delphi7. Модуль ClipBrd подключен.
Из программы делался отчет в Word. Используя процедуру CopyToClipboardMetafile, копировались Chart.
Используя CopyRect копировалась часть формы в bmp, затем clipboard.assign(btm) и из clipboard btm вставлялся в Word.
Сейчас Win7, Delphi7 или Win7, DelphiХЕ и вместо btm в Word копируется серая панель. Настройки Word проверены, Chart копируются, вручную копия активного окна делается.
krGorka вне форума Ответить с цитированием
Старый 17.05.2016, 13:37   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Проверь, что после копирования содержится в буфере обмена любой прогой для работы с ним.

Ну, или вставь куданить в пэйнт, штоли...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.05.2016, 14:33   #3
krGorka
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 35
По умолчанию

В буфере обмена содержится серая панель. Проблема решена с использованием функции из модуля unit ScrnCap, найденного через инет.
Код:
unit ScrnCap;   
interface  
uses WinTypes, WinProcs, Forms, Classes, Graphics, Controls;   
    
 { Копирует прямоугольную область экрана }  
function CaptureScreenRect(ARect : TRect) : TBitmap;   
 { Копирование всего экрана }  
function CaptureScreen : TBitmap;   
 { Копирование клиентской области формы или элемента }  
function CaptureClientImage(Control : TControl) : TBitmap;   
 { Копирование всей формы элемента }  
function CaptureControlImage(Control : TControl) : TBitmap;   
    
{===============================================================}  
implementation  
function GetSystemPalette : HPalette;   
var  
 PaletteSize  : integer;   
 LogSize      : integer;   
 LogPalette   : PLogPalette;   
 DC           : HDC;   
 Focus        : HWND;   
begin  
 result:=0;   
 Focus:=GetFocus;   
 DC:=GetDC(Focus);   
 try  
   PaletteSize:=GetDeviceCaps(DC, SIZEPALETTE);   
   LogSize:=SizeOf(TLogPalette)+(PaletteSize-1)*SizeOf(TPaletteEntry);   
   GetMem(LogPalette, LogSize);   
   try  
     with LogPalette^ do  
     begin  
       palVersion:=$0300;   
       palNumEntries:=PaletteSize;   
       GetSystemPaletteEntries(DC, 0, PaletteSize, palPalEntry);   
     end;   
     result:=CreatePalette(LogPalette^);   
   finally  
     FreeMem(LogPalette, LogSize);   
   end;   
 finally  
   ReleaseDC(Focus, DC);   
 end;   
end;   
    
    
function CaptureScreenRect(ARect : TRect) : TBitmap;   
var  
 ScreenDC : HDC;   
begin  
 Result:=TBitmap.Create;   
 with result, ARect do begin  
  Width:=Right-Left;   
  Height:=Bottom-Top;   
  ScreenDC:=GetDC(0);   
  try  
    BitBlt(Canvas.Handle, 0,0,Width,Height,ScreenDC, Left, Top, SRCCOPY        );   
  finally  
    ReleaseDC(0, ScreenDC);   
  end;   
  Palette:=GetSystemPalette;   
 end;   
end;   
    
function CaptureScreen : TBitmap;   
begin  
 with Screen do  
  Result:=CaptureScreenRect(Rect(0,0,Width,Height));   
end;   
    
function CaptureClientImage(Control : TControl) : TBitmap;   
begin  
 with Control, Control.ClientOrigin do  
  result:=CaptureScreenRect(Bounds(X,Y,ClientWidth,ClientHeight));   
end;   
    
function CaptureControlImage(Control : TControl) : TBitmap;   
begin  
 with Control do  
  if Parent=Nil then  
    result:=CaptureScreenRect(Bounds(Left,Top,Width,Height))   
  else  
   with Parent.ClientToScreen(Point(Left, Top)) do  
    result:=CaptureScreenRect(Bounds(X,Y,Width,Height));   
end;   
end.
Наверное, причина "серости " скопированного куска в SystemPalette. Спасибо. Тему можно закрыть
krGorka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Clipboard АлександрDelphi Общие вопросы Delphi 10 30.03.2016 00:24
winapi clipboard PonyHunter Win Api 1 28.04.2013 16:18
IdFTP + Clipboard weech Работа с сетью в Delphi 4 29.11.2012 10:31
Clipboard [Qj] Общие вопросы .NET 1 21.08.2009 18:50