реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сообщения\события в MATLAB, Как послать
Crusher
сообщение Dec 4 2008, 17:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-12-04
Пользователь №: 1 275



Всем доброго времени суток!
Возник вопрос: как послать сообщение (message) какому-либо объекту GUI в MATLAB? К примеру, можно ли послать сообщение WM_MAXIMIZE для развертывания окна GUI? Перерыл весь хелп, ниче не нашел...
Go to the top of the page
 
+Quote Post
Demeny
сообщение Dec 5 2008, 13:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(Crusher @ Dec 4 2008, 20:43) *
Всем доброго времени суток!
Возник вопрос: как послать сообщение (message) какому-либо объекту GUI в MATLAB? К примеру, можно ли послать сообщение WM_MAXIMIZE для развертывания окна GUI? Перерыл весь хелп, ниче не нашел...

Вопрос не имеет отношения к MATLAB. Послать сообщение можно любому окну, а объекты GUI в Windows - это те же окна, являющиеся дочерними окнами относительно главного окна приложения. Для этого нужное окно необходимо разыскать в иерархии всех окон системы (иерархия окон представляет собой дерево, в котором корнем является Desktop-окно).
Когда-то писал для себя маленькую утилиту, позволяющую переместить и изменить размер любого окна в системе - попробуйте, возможно, она окажется полезной. Нужное окно в этой утилите разыскивается либо по полному имени, либо выбирается из иерархии окон - после этого можно задать ему новые размеры и координаты левого верхнего угла. (см. аттач)
Прикрепленный файл  WndResizer.zip ( 103.02 килобайт ) Кол-во скачиваний: 124


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
Crusher
сообщение Dec 5 2008, 17:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-12-04
Пользователь №: 1 275



Цитата(Demeny @ Dec 5 2008, 16:20) *
Вопрос не имеет отношения к MATLAB. Послать сообщение можно любому окну, а объекты GUI в Windows - это те же окна, являющиеся дочерними окнами относительно главного окна приложения. Для этого нужное окно необходимо разыскать в иерархии всех окон системы (иерархия окон представляет собой дерево, в котором корнем является Desktop-окно).
Когда-то писал для себя маленькую утилиту, позволяющую переместить и изменить размер любого окна в системе - попробуйте, возможно, она окажется полезной. Нужное окно в этой утилите разыскивается либо по полному имени, либо выбирается из иерархии окон - после этого можно задать ему новые размеры и координаты левого верхнего угла. (см. аттач)
Прикрепленный файл  WndResizer.zip ( 103.02 килобайт ) Кол-во скачиваний: 124


Вы меня неправильно поняли...Задача ставилась так: в матлабе создаем некое окно GUI(средствами самого же матлаба), например, figure. Затем надо из матлабовского же скрипта послать сообщение этому окну, например, для его развертывания на весь экран. Ну или послать сообщение от одного окна матлабовского GUI другому...

Сообщение отредактировал Crusher - Dec 5 2008, 17:33
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 10 2008, 08:52
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Crusher @ Dec 5 2008, 22:32) *
Вы меня неправильно поняли...Задача ставилась так: в матлабе создаем некое окно GUI(средствами самого же матлаба), например, figure. Затем надо из матлабовского же скрипта послать сообщение этому окну, например, для его развертывания на весь экран. Ну или послать сообщение от одного окна матлабовского GUI другому...

дак вроде как через хендл делается.
Go to the top of the page
 
+Quote Post
Crusher
сообщение Dec 11 2008, 11:12
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-12-04
Пользователь №: 1 275



Цитата(shf_05 @ Dec 10 2008, 11:52) *
дак вроде как через хендл делается.


Через хэндл можно устанавливать определенные параметры окна\объекта (position, color и т.д.). Послать именно сообщение не получается, а нужных параметров в списке нету(например, нельзя задать в свойствах чтобы окно разворачивалось или сворачивалось). Вообще, есть подозрение что в матлабе этого в принципе нельзя сделать...sad.gif
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 12 2008, 04:53
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Crusher @ Dec 11 2008, 16:12) *
(например, нельзя задать в свойствах чтобы окно разворачивалось или сворачивалось). Вообще, есть подозрение что в матлабе этого в принципе нельзя сделать...sad.gif

по-моему не совсем так-
хоть я этого и не делал, к сож. попробовать сейчас времени нет
окно можно создавать развернутое, свернутое и тп, можно попытаться: задать новые св-ва окна через хэндл и обновить.
Go to the top of the page
 
+Quote Post
Crusher
сообщение Dec 12 2008, 13:58
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-12-04
Пользователь №: 1 275



Цитата(shf_05 @ Dec 12 2008, 07:53) *
по-моему не совсем так-
хоть я этого и не делал, к сож. попробовать сейчас времени нет
окно можно создавать развернутое, свернутое и тп, можно попытаться: задать новые св-ва окна через хэндл и обновить.


В том-то и прикол, что задать свойства объекта через хэндл и послать сообщение этому объекту-это разные вещи. Сообщение обрабатываются через callback-функции объекта, а свойства в нашем случае задаются извне. В моем понимании, создание полноценного GUI без механизма обмена сообщениями просто неудобно (хотя,конечно,возможно smile.gif ).
В целом, по размышлении я пришел к выводу, что стандартными средствами этого сделать нельзя, так как Матлаб является кроссплатформенным приложением, следовательно, механизм сообщений для Win32 не будет работать, например, в Linux. А это не есть хорошо, и скорее всего разработчики просто не стали включать эту возможность. Хотя там есть подержка элементов ActiveX, используя которую можно делать ваще что угодно. Но я с этим не разбирался (и не собираюсь smile.gif )
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 16 2008, 10:57
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Crusher @ Dec 12 2008, 18:58) *
стандартными средствами этого сделать нельзя, так как Матлаб является кроссплатформенным приложением, следовательно, механизм сообщений для Win32 не будет работать, например, в Linux. А это не есть хорошо, и скорее всего разработчики просто не стали включать эту возможность. Хотя там есть подержка элементов ActiveX, используя которую можно делать ваще что угодно. Но я с этим не разбирался (и не собираюсь smile.gif )

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

Цитата(Crusher @ Dec 12 2008, 18:58) *
В том-то и прикол, что задать свойства объекта через хэндл и послать сообщение этому объекту-это разные вещи. Сообщение обрабатываются через callback-функции объекта, а свойства в нашем случае задаются извне. В моем понимании, создание полноценного GUI без механизма обмена сообщениями просто неудобно (хотя,конечно,возможно smile.gif ).

вопрос можно, в обычных GUI сообщения посылает операционка здесь у вас вместо нее матлаб?
а ваш пример про а свернуть и развернуть окно вообще самой ОС делается если я не ошибаюсь?

немного вас не понимаю- напишите, пример того, что вы хотите.

Сообщение отредактировал shf_05 - Dec 16 2008, 10:31
Go to the top of the page
 
+Quote Post
Crusher
сообщение Dec 22 2008, 13:29
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-12-04
Пользователь №: 1 275



Цитата(shf_05 @ Dec 16 2008, 13:57) *
немного вас не понимаю- напишите, пример того, что вы хотите.

Пример:

Цитата
%создаем окно из матлаба
h = figure

%теперь хотим развернуть его во весь экран
----здесь было бы неплохо послать сообщение WM_MAXIMIZE созданному окну с хэндлом h, но как это сделать?


Кстати, свойства, доступные в хэндле, не позволяют максимизировать окно. По крайней мере я не нашел, как это сделать sad.gif

Теперь вопрос прояснился?
Go to the top of the page
 
+Quote Post
D.I.M.A
сообщение Dec 22 2008, 14:34
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 26-08-08
Из: Москва
Пользователь №: 39 824



Добрый вечер.

Привожу свою реализацию данной задачи. Правда не очень удобную в использовании.

% создаем figure
h = figure;
plot(1:1:100,1:2:200);

% изменяем параметра figure "ручками", варьируя n, m и k.
scrsz = get(0,'ScreenSize');
set(h,'Position',[1 scrsz(4)/n scrsz(3)/m scrsz(4)/k]);
Go to the top of the page
 
+Quote Post
Crusher
сообщение Dec 22 2008, 15:45
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-12-04
Пользователь №: 1 275



Цитата(D.I.M.A @ Dec 22 2008, 17:34) *
Добрый вечер.

Привожу свою реализацию данной задачи. Правда не очень удобную в использовании.

% создаем figure
h = figure;
plot(1:1:100,1:2:200);

% изменяем параметра figure "ручками", варьируя n, m и k.
scrsz = get(0,'ScreenSize');
set(h,'Position',[1 scrsz(4)/n scrsz(3)/m scrsz(4)/k]);


Спасиб smile.gif
Но пример с максимизацией окна-это просто иллюстрация к вопросу "Можно ли посылать из матлабовского кода сообщения объектам GUI-интерфейса, созданным в матлабе"
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 24 2008, 08:53
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



+1

может быть можно наваять своих функций на С, использующих winAPI (или еще каких-либо методов) и "заделать" в м файл.
всеж таки посылая"WM_MAXIMIZE и тп" вы отправляете их не окну, а win32, а уже она меняет его размеры (если я не ошибаюсь), а например для QT (linux) вроде как прямо окну.
Go to the top of the page
 
+Quote Post
Lelikk
сообщение Jan 9 2009, 18:59
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 15-12-07
Из: Москва
Пользователь №: 33 326



Цитата(Crusher @ Dec 22 2008, 18:45) *
Спасиб smile.gif
Но пример с максимизацией окна-это просто иллюстрация к вопросу "Можно ли посылать из матлабовского кода сообщения объектам GUI-интерфейса, созданным в матлабе"


Скорее всего такое не выйдет в случае произвольного сообщения: между средой MATLAB и окном, созданным Win32 GUI лежит прослойка Java, которая скрывает в общем-то от матлаба, как создано окно, потому что на Win и Linux это ессесно по-разному.
Поэтому MATLAB даже на знает, видимо, что у окна есть HWND.
Можно попробовать обойти это средствами винды через какой-нить FindWindow, задав ему заголовок вашего окна. Но путь чреват очевидным граблями с неуникальностью заголовка или чем-то подобным... Хотя может сгодиться в частном случае , по крайней не для MATLABовских окон у меня сто раз такое прокатывало...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 23:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016