LinuxMove
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Программное обеспечение

#1: LinuxMove Author: D1PLocation: Тбилиси PostPosted: Sun Nov 27, 2005 02:07
    —
Маленькая программка, которая позволит вам перемещать любое окно за любой его участок (так, как это делано под XWindows в Linux).
Собсно, никаких пожеланий и вопросов оосбо не жду Smile Просто давно хотел такое написать, ну вот и написал.

Хочется, чтобы прога при запуске скрывалась в трей, но что-то не допру как такую элементарную вещь сделать.

#2:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Sun Nov 27, 2005 17:30
    —
Quote:
Хочется, чтобы прога при запуске скрывалась в трей

SetWindowPos(hMainWnd, HWND_BOTTOM, 0,0, 0,0, SWP_HIDEWINDOW);

#3:  Author: D1PLocation: Тбилиси PostPosted: Sun Nov 27, 2005 19:28
    —
посмотрим, но вроде пробовал - не работает.
-
Добавлено:
Точнее - работает, но не так, как хотелось бы. Если вставлять этот код в OnCreate форма не исчезает, а только меняет размер и становится неактивной, есил вставить куда-то ещё, например в OnActivate - скрывается, то в таскбаре остаётся кнопка приложения (пока не свернуть его).
Буду копать дальше, думаю решение должно быть тривиальным, это я пока его не вижу.

#4:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Sun Nov 27, 2005 20:28
    —
Вот решение:
1) добавляешь в форму в раздел private:
Code:
type
  TForm1 = class(TForm)
  ...
  private
    { Private declarations }
    // Обработчик сообщения минимизации
    procedure MinimizeInTray(var Msg: TMessage); message WM_SYSCOMMAND;
  end;


2) добавляешь функцию:
Code:
procedure TForm1.MinimizeInTray(var Msg: TMessage);
begin
  inherited;
  if Msg.WParam = SC_MINIMIZE then  // если нажат кнопарь "Свернуть"
  begin
    TrayIcon(1, Application.Icon.Handle);    // твоя функция добавления иконки в трэй
    ShowWindow(Application.Handle, SW_HIDE)  // прячем форму
  end
end;


3) в onCreate формы вписываем:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.Minimize
end;


4) изменяем исходник проекта так (показываю свой пример):
Code:
program MinTray;

uses
  Forms,
  Windows,
  Unit1 in 'Unit1.pas' {Form1},
  About in 'About\About.pas' {AboutBox};

{$R *.res}

const
  WM_SYSCOMMAND = $0112;
begin
  Application.Initialize;
  Application.Title := 'Minimize in Tray';
  Application.CreateForm(TForm1, Form1);

  Unit1.Form1.Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0); // программное нажатие на кнопку "Свернуть"

  Application.Run;
end.

#5:  Author: D1PLocation: Тбилиси PostPosted: Sun Nov 27, 2005 21:24
    —
Мдя... всё не так тривиально. Спасибо, попробую.

Добавлено:
Нет, не работает. Всячески извращался - нет и всё. Сообщения приходят, но НЕТ. Скорее всего - где-то внутри компонента иконки идёт перехват сообщения.
В общем стал пробовать по другому, вроде получилось, правда не совсем так, как хотелось, ну да ладно. Позже выложу что вышло.

#6:  Author: D1PLocation: Тбилиси PostPosted: Sun Nov 27, 2005 23:04
    —
Переделал всё нафиг, теперь работает.
Плюс возможность ставить прогу в автозагрузку и ещё поправлено несколько мелких недочётов.

#7:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Sun Nov 27, 2005 23:09
    —
Quote:
Нет, не работает. Всячески извращался - нет и всё. Сообщения приходят, но НЕТ. Скорее всего - где-то внутри компонента иконки идёт перехват сообщения.

А зачем компонент иконки? ведь можно без всяких компонентов обойтись.
В моём примере просто иконка вручную помещается в трэй.

#8:  Author: D1PLocation: Тбилиси PostPosted: Mon Nov 28, 2005 02:43
    —
да там не компонент даже, а так - самодельная наляпывалка с некоторыми расширенными возможностями. Забей, короче, всё равно прогу я уже эту трогать не буду, что хотел - реализовал, работает и не глючит вроде.
Кстати, как у тебя иконка просто так откуда-то берётся? Насколько я знаю - в дельфе нет такого компонента, либо ставь сторонние, либо пиши сам, как я и сделал.

#9:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Mon Nov 28, 2005 03:05
    —
Application.Icon.Handle — это хэндл текущей иконки программы (если она есть).

Кстати, а как тебе удалось запустить приложение в свёрнутом в трэй виде?
У меня по другому не получилось, кроме как я показал.

#10:  Author: D1PLocation: Тбилиси PostPosted: Mon Nov 28, 2005 23:58
    —
Методом научного тыка Smile. Абсолютно сурьёзно.
Щас некогда код доставать, может потом.

#11:  Author: WarGoth PostPosted: Sun Sep 03, 2006 22:38
    —
А меня очень прикольнула программулина!! Я привык в линухе двигать так окна и винда уже сильно вымогает вообще... Эта програмка помогает выносить винду еще как-то... Предложение: немного доработать прогу: в КДЕ если тащить мышку с alt+правой_клавишей, то изменяются размеры окна. Тоже удобная штука. И еще нашел глюк: иногда прога взглюкивает и без alt'a окна передвигаются... Так что не забрасывай это дело! Поддерживаю!

#12:  Author: D1PLocation: Тбилиси PostPosted: Mon Sep 04, 2006 19:18
    —
Исходники пару месяцев назад отданы на доработку челу с уином 178318478 (постучал, поздоровался, попросил, я поделился), с тех пор ни слуху ни духу Smile
Quote:
Предложение: немного доработать прогу: в КДЕ если тащить мышку с alt+правой_клавишей, то изменяются размеры окна.

Я в одной из следующих версий это делал, но недоделал и забил.
Желающие поковыряться с исходниками последней написанной мной версии, могут взять их тут: http://super.wincmd.ru/_tmp/UTIL_LinuxMove_2.0b_ful_src.rar (228 кб, Дельфи). Там уже присутствуют функции изменения размера окон и ещё кое какие, но всё очень глючно.

#13:  Author: Noob PostPosted: Thu Dec 04, 2014 16:45
    —
D1P
Отличная прога, только одну штучку хотелось бы допилить. Вы уже забросили кодить эту софтину?



Total Commander -> Программное обеспечение


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group