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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2010, 22:13   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Выбор окна мышкой

Всем привет!
Это знаете, о чём?
Вот например в SpyXX или ProcessExplorer-е так окно выбирается.

Это как-то просто реализуется?
Altera вне форума Ответить с цитированием
Старый 14.05.2010, 22:33   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

этот курсор это кружок с активной точкой мыши в центре.
а вообще там юзаются SetCapture(установка захвата мыши) и SetCursor(смена курсора) при нажатии на этот значок(потом у него картинка меняется на картинку без кружка)
и при отпускании кнопки мыши(при захвате мы получим это сообщение) ReleaseCapture для освобождения от захвата, ну и ClientToScreen для получения координат
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.05.2010, 05:59   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
этот курсор это кружок с активной точкой мыши в центре.
а вообще там юзаются SetCapture(установка захвата мыши) и SetCursor(смена курсора) при нажатии на этот значок(потом у него картинка меняется на картинку без кружка)
и при отпускании кнопки мыши(при захвате мы получим это сообщение) ReleaseCapture для освобождения от захвата, ну и ClientToScreen для получения координат
Что-то с WM_CAPTURECHANGED проблемы

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    Label1: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure wmCaptureChanged(var msg: tMessage);
    message WM_CAPTURECHANGED;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
  form2.Show;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  setCapture(handle);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  caption := format('X: %d; Y: %d;', [X, Y]);
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  releaseCapture;

  Panel1.caption := format('X: %d; Y: %d;', [X, Y]);
end;

procedure TForm1.wmCaptureChanged(var msg: tMessage);
var
  caption: array [0 .. MAX_PATH] of char;
begin

  msg.Result := 0;
  getWindowText(msg.LParam, @caption[0], MAX_PATH);
  Label1.caption := caption;
end;

end.
А вот как реализовать то, что вокруг окна появляется рамка, как при перетаскивании или изменении размеров?
Altera вне форума Ответить с цитированием
Старый 15.05.2010, 13:20   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а я про то сообщение не говорил между прочим=)
оно нужно лишь для того чтоб отслеживать что у вас сперли захват мыши
TForm1.FormMouseUp, все нормально, срабатывает же?
так вот именно в нем и определяйте по координатам(WindowFromPoint)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.05.2010, 10:13   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

А рамку то как вокруг окна отобразить?
Altera вне форума Ответить с цитированием
Старый 19.05.2010, 01:49   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

через GetWindowDC, GetWindowRect берем контекст окна и его полные размеры.
далее через АПИ функции рисования с помощью таймера рисуем
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемка с мышкой. Терминатор Свободное общение 5 03.05.2009 23:17
Работа с мышкой Klio Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.05.2008 22:37
закрыть все дочерни окна, кроме главного окна Worms Общие вопросы Delphi 2 03.12.2007 22:18
Управление МЫШКОЙ!!! Рустам Помощь студентам 11 28.10.2007 12:15
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13