Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменение положения нужного окна

Delphi , Программа и Интерфейс , Размеры и Положение

Изменение положения нужного окна

Автор: Lookin
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Изменение положения нужного окна

Зависимости: Windows, Messages, SysUtils, Classes, Graphics,
             Controls, Forms, Dialogs,StdCtrls
Автор:       lookin, lookin@mail.ru, Екатеринбург
Copyright:   lookin
Дата:        06 мая 2002 г.
***************************************************** }

unit ShakeMe;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
procedure Shake(h: hWnd);

var
  Form1: TForm1;
  h, h1: hwnd;
  p: array[0..255] of char;
  no, ist: boolean;
  s: string;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  a: string;
begin
  a := Edit1.Text;
  h := form1.handle;
  no := false;
  while no = false do
  begin
    ist := false;
    h := GetNextWindow(h, GW_HWNDNEXT);
    if h = 0 then
      no := true;
    GetWindowText(h, p, 255);
    s := strpas(p);
    if Pos(a, s) <> 0 then
      Shake(h);
  end;
  no := false;
  while no = false do
  begin
    ist := false;
    h := GetNextWindow(h, GW_HWNDPREV);
    if h = 0 then
      no := true;
    GetWindowText(h, p, 255);
    s := strpas(p);
    if Pos(a, s) <> 0 then
      Shake(h);
  end;
end;

procedure Shake(h: hWnd);
var
  i: integer;
begin
  //мертвый цикл
  randomize;
  i := 0;
  while i = 0 do
  begin
    sleep(500);
    SetWindowPos(h, 0, random(500), random(500), 0, 0, SWP_NOSIZE);
  end;
end;

end.

Here's a translation of the content into Russian:

Код - это программный проект на языке Delphi, который изменяет позицию окна с указанным заголовком. Программа использует функции GetNextWindow и SetWindowPos, чтобы найти и переместить окна.

Вот разбивка кода:

  1. Единица ShakeMe содержит два процедура: Button1Click и Shake.
  2. Button1Click вызывается, когда кнопка на форме кликается. Она получает текст из поля ввода, находит все окна с заголовками, содержащими этот текст, используя GetNextWindow, и затем вызывает процедуру Shake для каждого совпадающего окна.
  3. Процедура Shake принимает в качестве входного параметра handle окна. Она использует цикл, чтобы случайно переместить окно с помощью SetWindowPos. Цикл контролируется случайным целым числом i, которое устанавливается в 0 изначально.

Код имеет некоторые проблемы:

  1. Переменная Form1 объявлена в глобальном пространстве, но не ясно, является ли это намеренным или есть ошибка.
  2. Процедура Button1Click использует цикл while без условия остановки, что может привести к бесконечному циклу, если поиск совпадающих окон fails.
  3. Процедура Shake также имеет бесконечный цикл, контролируемый случайным целым числом i. Это не идеально, потому что может вызвать проблемы с производительностью или неожиданное поведение.

Вот альтернативное решение:

  1. Используйте более эффективный метод поиска и перемещения окон, например, список handle окон или библиотеку,such as WinAPI.
  2. Реализуйте условие остановки для циклов, чтобы предотвратить бесконечные циклы.
  3. Рассмотрите использование таймера вместо Sleep, чтобы контролировать перемещение окон.

Вот обновленная версия кода с некоторыми улучшениями:

unit ShakeMe;
...

... и т.д.

В статье описано изменение положения нужного окна на компьютере с помощью программы на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Размеры и Положение ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:49:04/0.0037550926208496/0