Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Вниз

Canvas   Найти похожие ветки 

 
ISO   (2006-07-26 01:32) [0]

Как получить изображение находящееся под формой?
Например под Form1.
типа GetDC(0); только нужно без Form1 что-бы было
P/S т.е. мне нужна та картинка которая будет на месте Form1 если сделать Form1.Hide
PP.s Прятать временно Form1 не предлогать


 
Palladin ©   (2006-07-26 01:40) [1]

а зачем?


 
Германн ©   (2006-07-26 01:43) [2]

Нескромный, может быть, вопрос - а для чего это нужно?
Иначе получишь кучу не тех ответов и непонятных вопросов! Имхо.
Или не получишь ничего! Это тоже закономерная реакция на сабж!


 
ISO   (2006-07-26 01:47) [3]

Да все просто, хочу сделать "увеличилку". Водишь за заголовок формы
а на нее выводиться увеличенное изо из под формы. Вот.
А вы че подумали???


 
Palladin ©   (2006-07-26 01:52) [4]

мы ниче не подумали... однако VCL форма для "увеличительного стекла" это как столовый нож для операции на сердце...


 
ISO   (2006-07-26 01:52) [5]


> Palladin ©   (26.07.06 01:52) [4]

А как по другому можно?


 
Германн ©   (2006-07-26 01:55) [6]


> А вы че подумали???

Да ничЁ мы не подумали! :-)
Хотели просто понять суть вопроса. :-(


 
ISO   (2006-07-26 01:55) [7]


> однако VCL форма для "увеличительного стекла" это как столовый нож для операции на сердце...

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


 
ISO   (2006-07-26 02:47) [8]

Что, тяжолый вопрос?
Вот нашел PaintDesktop, но он, зараза, рисует только картинку раб. стола....
Или, что я задумал, на делфях такое не провернуть?


 
Германн ©   (2006-07-26 02:55) [9]


> ISO   (26.07.06 02:47) [8]
> Что, тяжолый вопрос?

Не. Но,лично для меня, до сих пор непонятный. :-(

> Или, что я задумал, на делфях такое не провернуть?

А что ты задумал? Объясни на русском языке.


 
ISO   (2006-07-26 02:58) [10]

> [3] ISO   (26.07.06 01:47)

Че? неужели непонятно??????????


 
ISO   (2006-07-26 03:02) [11]

Скопировать изображение из под формы на форму. Вроде-бы по русски


 
Rial ©   (2006-07-26 03:41) [12]

Не потянет VCL такое.
Отрисовка, да еще с увеличением ...
Даже если и скопируешь, когда будешь перемещать форму
- будут страшные тормоза.


 
Джо ©   (2006-07-26 03:44) [13]

> [12] Rial ©   (26.07.06 03:41)

Вы уж простите, но это бред.


 
Джо ©   (2006-07-26 03:47) [14]

По сабжу. Я не сильно совру, если сформулирую так: нет никакого изображения "под формой" на том месте, где есть эта форма. Кстати, я, видимо, не один не понял смысла затеи. Каким образом на форме возможно поместить увеличенное изображение того, что под ней есть? Это все равно, что в мешок, в который помещается 50 кг. картошки поместить 100 кг.


 
KilkennyCat ©   (2006-07-26 03:59) [15]

Ну есть вариант:
В момент запуска программы делать снимок рабочего стола, работать с ним.


 
GrayFace ©   (2006-07-26 05:14) [16]

Никак.
Единственное, что приходит на ум - динамически создавать курсор в виде лупы.


 
tButton ©   (2006-07-26 07:47) [17]

если присмотреться к стандартному magnifier"у винХР.
то окажется что то что под его окошком он не увеличивает.
если бы то что ты хочешь было бы возможно
то мелкомягкие это реализовали бы


 
Handle   (2006-07-26 08:46) [18]

procedure TForm1.FormCreate(Sender: TObject);
begin
 Form1.AlphaBlend:= true;
 Form1.DoubleBuffered:= true;
 Timer1.Interval:= 1;
 Timer1.Enabled:= true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 DC:                   HDC;
 ABitmap:            TBitmap;
 ARect:               TRect;
begin
 ABitmap:=TBitmap.Create;
 ABitmap.Height:=Screen.Height;
 ABitmap.Width:=Screen.Width;
 DC:=GetDC(0);
 BitBlt(ABitmap.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
 DC, Form1.ClientOrigin.X, Form1.ClientOrigin.Y, SRCCOPY);
 Form1.Canvas.Draw(0, 0, ABitmap);
 ABitmap.Free;
 ReleaseDC(0, DC);
end;


Лучше конечно всё это дело поставить на hook.
Могу пример подкинуть если хочешь.


 
@!!ex ©   (2006-07-26 09:49) [19]

Это невозможно. По той просто причине, что изображения под окном НЕ СУЩЕСТВУЕТ.
Я предполагаю, что тут есть варианты.

Нереcующих отправлю к програмке под название TaskSwitchXP.

Rial ©   (26.07.06 03:41) [12]
Не потянет VCL такое.
Отрисовка, да еще с увеличением ...
Даже если и скопируешь, когда будешь перемещать форму
- будут страшные тормоза.

Извенит, товарищ, но это действительно бред.
1) VCL не имеет никакого отношения к сути задачи. поскольку VCL - всего лишь надстройка над WinAPI.
2) Тормозоа не будет. Нужно написать ОЧЕНЬ криво, чтобы это тормозило.


 
@!!ex ©   (2006-07-26 09:55) [20]

Хм. Не понятно написал, :)
Я имел ввиду, что так как изображения под окном не существует, его не реально оттуда выдрать.
Но полюбому есть обходные варианты.


 
Handle   (2006-07-26 10:00) [21]


> @!!ex ©   (26.07.06 09:55) [20]
> Но полюбому есть обходные варианты.


Например


> Handle   (26.07.06 08:46) [18

]


 
@!!ex ©   (2006-07-26 10:07) [22]

Handle
по коду не могу сказать, что это 100% рабочий вариант, а проверить сейчас не могу. поэтому ваш пост и не комментировал.


 
TUser ©   (2006-07-26 11:03) [23]

Просмотреть все окна в системе (EnumWindows).
Для каждого окна (кроме своей формы) - если оно не свернуто и не скрыто (GetWindowPlacement) посмотреть положение и размеры (GetWindowRect).
Если размер подходит - копировать изображение (GetDC, BitBlt, ReleaseDC).

Только не приходит в голову, как Z-порядок окон узнать. Вроде бы в API такого нет. Но копать в этом направлении надо, имхо.


 
Desdechado ©   (2006-07-26 11:36) [24]

Может, я чего не знаю, но имхо в винде отрисовывается только то, что должно быть видимо. Если под окном что-то есть, то отрисовываетсятолько видимая часть, а другое - нет.

Как вариант - сделать окно прозрачным, а в OnPaint сделать свою прорисовку с увеличением. Но мало шансов, что прокатит.


 
TUser ©   (2006-07-26 11:55) [25]

Чем, кстати, не устраивает лупа, которая идет вместе с виндусом?


 
Amoeba ©   (2006-07-26 13:25) [26]

TabfMagnifier  из ABF Visual Components Library.

TabfMagnifier allows the user to magnify the area of screen around the cursor. It is a ready solution for the magnifier program.

http://www.abf-dev.com/abf-vcl.shtml


 
Rial ©   (2006-07-26 13:42) [27]

Мда, что я тут понаписал ... ((
Теперь меня сгноят.
Убейте меня.


 
Handle   (2006-07-26 13:48) [28]


> Rial ©   (26.07.06 13:42) [27]


Умри подлец.


 
ISO   (2006-07-26 22:36) [29]

Спасибо всем, вот так, вот с вашей помощью сделал то чего задумал.

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, RXCtrls;
type
 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 DC: HDC;
 BMP, BMPBIG: TBitMap;
 xU: Integer;
 xX: Integer;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var FRGN: HRGN;
begin
xU:=600;       // Увеличение
xX:=-(xU div 2);
Form1.Height:=200;
Form1.Width:=200;
Form1.BorderStyle:=bsNone;
Form1.FormStyle:=fsStayOnTop;
FRGN:=CreateEllipticRgn(0, 0, Width, Height);
SetWindowRgn(Handle, FRGN, True);
Form1.AlphaBlend:=True; //Просто включено, а прозрачность(AlphaBlendValue)=255 т.е. форма не прозрачна
//Form1.DoubleBuffered:=True; //Без этого даже, помоему, лучше..
Timer1.Interval:=1;
Timer1.Enabled:=True;
BMP:=TBitMap.Create;
BMP.Height:=Screen.Height;
BMP.Width:=Screen.Width;
BMPBIG:=TBitmap.Create;
BMPBIG.Height:=Height+xU;
BMPBIG.Width:=Width+xU;
Canvas.Brush.Style:=bsClear;
DC:=GetDC(0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 BitBlt(BMP.Canvas.Handle, 0, 0, Width, Height, DC, ClientOrigin.X, ClientOrigin.Y, SRCCOPY);
 BMPBIG.Canvas.CopyRect(Rect(0, 0, 200+xU, 200+xU), BMP.Canvas, Rect(0, 0, 200, 200));
 Form1.Canvas.Draw(xX, xX, BMPBIG);
 Form1.Canvas.Ellipse(1, 1, Width-2, Height-2);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
const DG=$F012;
begin
 if Button=mbLeft then begin
  ReleaseCapture; Form1.Perform(WM_SYSCOMMAND, DG, 0);
 end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbRight then Close;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 BMP.Free;
 BMPBIG.Free;
 ReleaseDC(0, DC);
end;

end.


Это было в познавательных целях....

> [16] GrayFace ©   (26.07.06 05:14)
> [19] @!!ex ©   (26.07.06 09:49)

Говорили не запоет.....:)
Нормально работает. Отдельное спасибо Handle.
Всем спасибо.
ТЕМА ЗАКРЫТА.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.041 c
2-1153819232
Провинциал
2006-07-25 13:20
2006.08.13
А "ЗЮКИ" в меню...


3-1149323064
АНОНИМ
2006-06-03 12:24
2006.08.13
Закрыть базу Access


6-1143428539
Denisac
2006-03-27 07:02
2006.08.13
Кодировка в сообщении


15-1153352226
MeF Dei Corvi
2006-07-20 03:37
2006.08.13
Читерство в коде


2-1153752165
VALUA
2006-07-24 18:42
2006.08.13
DBGrid - N колонки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский