Форум: "Начинающим";
Текущий архив: 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.039 c