Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Вывод окна в точке с координатами


Автор: gawriil 11.5.2010, 18:05
Коллеги!
Есть 6 мониторов. Рабочий стол растянут на все 6 штук. Есть желание запускать 6 экземпляров приложений(например браузер), но так чтобы каждое из них располагалось на своем(отдельном) мониторе. Думается, что надо выводить каждое окно в точке с координатами х:y. Кто-нибудь реализовывал что-нибудь подобное? Буду благодарен за "пинок" в нужном направлении. 

Автор: shamber 11.5.2010, 22:08
Это все-ж в раздел про GUI.
Цитата(gawriil @  11.5.2010,  18:05 Найти цитируемый пост)
Думается, что надо выводить каждое окно в точке с координатами х:y.

делается предельно просто. Другой вопрос определить x:y начала каждого монитора. Хотя думаю, что это не самая страшная проблема

Автор: gawriil 12.5.2010, 06:16
Цитата(shamber @ 11.5.2010,  22:08)
делается предельно просто.

Как? Меня интересует именно вывод окон в нужном месте. 

Автор: shamber 12.5.2010, 07:25
gawriil, какое окно?

Автор: arto 12.5.2010, 08:37
for i in {0..5}; do
    firefox -display :0.$i -geometry +$x+$y
done ?

Автор: gawriil 12.5.2010, 22:20
Уважаемые коллеги!
Похоже решение найдено.
use Win32::GUI::AxWindow; -> есть все, что мне надо. Всем спасибо.

Автор: gawriil 15.5.2010, 13:18
Может кому-нибудь пригодится.

Код

use strict;
use warnings;
use Win32::GUI();
use Win32::GUI::AxWindow;

my ( $win1, $win2, $win3, $win4, $win5, $win6,
     $control1, $control2, $control3, $control4, $control5, $control6 );
     
my $icon = new Win32::GUI::Icon('Burn.ico');                 # Иконка для окна
my $desktop        = Win32::GUI::GetDesktopWindow(); # Дескриптор всего экрана
my $desktop_width  = Win32::GUI::Width($desktop);    # Ширина экрана
my $desktop_height = Win32::GUI::Height($desktop);   # Высота экрана

#===  FUNCTION  ================================================================
#  NAME:              create_browser
#  PURPOSE:        создание окна браузера
#  DESCRIPTION: создаем главное окно, а в нем контрол ActiveX (IE)
#  PARAMETERS:  (переменные для хэндлов главного окна и элемента ActiveX
#                           имя окна, имя контрола, положение окна, url-адрес,
#                           наименование улицы)
#  RETURNS :       хэндл окна
#===============================================================================    
sub create_browser {
    my ( $window, $control, $name_win, $control_name, $x_position, $url, $street ) = @_;
    
# Главное окно

    $window = new Win32::GUI::Window(
        -name        => "$name_win",
        -title       => "$street",
        -pos         => [ "$x_position", 0 ],
        -size        => [ $desktop_width, $desktop_height ],
        -resizable   => 0,
        -sysmenu     => 1,
        -titlebar    => 0,
        -minimizebox => 0,
        -maximizebox => 0,
    );
    
    $window->SetIcon($icon);                        # Устанавливаем иконку
    
    $control = new Win32::GUI::AxWindow(
        -parent  => $window,
        -name    => "$control_name",
        -control => "Shell.Explorer.2",
        -pos     => [ 0, 0 ],
        -size    => [ $desktop_width, $desktop_height ],
        -vscroll => 0,
        -hscroll => 0,
    );
    
    $control->CallMethod( "Navigate", "$url" );
    
    return $window;

}    # ----------  end of subroutine create_browser  ----------

sub window1_Terminate {
    return -1;
}

sub window2_Terminate {
    return 1;
}

#===  FUNCTIONS  ===============================================================
#  NAME:           window(s)_Resize
#  PURPOSE:     при изменении размеров главного окна, изменяем 
#                       размеры контрола расположенного в нем
#  DESCRIPTION: ---
#  PARAMETERS:  ---
#  RETURNS:     ---
#===============================================================================
sub window1_Resize { 
    if ( defined $win1 ) {
        my ( $width, $height ) = ( $win1->GetClientRect )[ 2 .. 3 ];
        $win1->control1->Move( 0, 0 );
        $win1->control1->Resize( $width, $height );
    }
}

$win1 = create_browser( $win1, $control1, 'window1', 'control1', 0, "http://-----------", 'строка' );
$win1->Show();
$win2 = create_browser( $win2, $control2, 'window2', 'control2', "$desktop_width", "http://--------", 'строка' );
$win2->Show();

Win32::GUI::Dialog();



M
JackYF
Пользуйся кнопкой "Код".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)