Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисуем на рабочем столе 
:(
    Опции темы
bagos
Дата 3.11.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



Сразу извиняйте если не в том разделе пишу. В программе пользователь должен получить координаты области(mouse down первая координата, mouse up вторая) на экране(не только на самой форме а в любом месте рабочего стола). Для наглядности думаю будет правильно сделать возможным чтобы рисовался прямоугольник когда пользователь задает область. Немног осхоже с выделением на рабочем столе, зажал кнопку мыши получил координату и рисуем прямоугольник, отпустили клавишу мыши, получили вторую координату. Зато все просто и наглядно будет)
Прошу помощи в реализации!smile
PM MAIL   Вверх
Mikel
Дата 9.11.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Глобальный хук на события мыши, а на столе по GetDC(0) можно рисовать. Но точно нужно именно это? Какова задача? Если что-н типа съемки с экрана, то можно сделать скрин экрана, потом положить его на форму на весь экран и выделяй что хочешь


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
~FoX~
Дата 10.11.2009, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



bagos, 
Код

unit Unit1;

interface

uses
  Windows, Messages, Classes, Graphics, Forms, StdCtrls, Controls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  public
    FHookStarted : Boolean;
    procedure JMouseHook(var Msg: tagMSG; var Handled: Boolean);
  end;

  procedure SquareDT(Fx, Fy, Lx, Ly: integer);

var
  Form1: TForm1;
  JHook: THandle;
  Fx, Fy, Lx, Ly: integer;

implementation

{$R *.dfm}


function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
begin
  Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut));
  if Code < 0 then Exit;
  if Code = HC_SYSMODALON then Exit;
  if Code = HC_ACTION then begin
    if EventStrut.message = WM_LBUTTONDOWN then begin
      Fx := EventStrut.paramL;
      Fy := EventStrut.paramH;
    end;
    if EventStrut.message = WM_LBUTTONUP then begin
      Lx := EventStrut.paramL;
      Ly := EventStrut.paramH;
      SquareDT(Fx, Fy, Lx, Ly);
    end;
  end;
end;

procedure SquareDT(Fx, Fy, Lx, Ly: integer);
var
  c: TCanvas;
begin
  c := TCanvas.Create;
  c.Brush.Color := clRed;
  c.Pen.Color := clRed;
  c.Handle := GetDC(GetWindow(GetDesktopWindow, GW_OWNER));
  c.Ellipse(Rect(Fx, Fy, Lx, Ly));
  c.free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if FHookStarted then begin
    MessageBox(Application.Handle, PChar('Mouse Hook is already started'), PChar('Error'), MB_OK);
    Exit;
  end;
  JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);

  if JHook > 0 then FHookStarted := True
  else MessageBox(Application.Handle, PChar('Can not started'), PChar('Error'), MB_OK);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FHookStarted := False;
  UnhookWindowsHookEx(JHook);
  JHook := 0;
end;

procedure TForm1.JMouseHook(var Msg: tagMSG; var Handled: Boolean);
begin
  Handled := False;
  if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then
    JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0);
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if FHookStarted then UnhookWindowsHookEx(JHook);
end;

end.



Это сообщение отредактировал(а) ~FoX~ - 10.11.2009, 08:06


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
AntonN
Дата 10.11.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18





--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.