OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 25 Апрель, 2024 15:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Не работает Oberon-2 код
СообщениеДобавлено: Четверг, 10 Январь, 2008 22:56 

Зарегистрирован: Вторник, 18 Сентябрь, 2007 08:48
Сообщения: 108
Привет!
Я использую XDS Oberon-2.
Создаю статус-бар. Это работает.
Не могу его разбить на parts (отсеки), получается только single-part.
Интересно, что Modulа-2 код работает.
В SendMessage третий параметр - длина маcсива, четвертый - сам адрес массива.
Даже M2ADR не помог для обероновского кода.
В чем может быть дело?
...

IMPORT CC := CommCtrl;
IMPORT W := Windows;

...
PROCEDURE CreateStatusBar (hWnd: W.HWND);
VAR
style: W.WS_SET;
arrWidthsSB: ARRAY 6 OF INTEGER;
-- arrWidthsSB: ARRAY [0..5] OF INTEGER;

BEGIN
style := W.WS_CHILD + W.WS_VISIBLE + W.WS_BORDER
+ W.WS_CLIPSIBLINGS + SYSTEM.VAL(W.WS_SET, CC.SBARS_SIZEGRIP);

hwndSB := W.CreateWindowEx (W.WS_EX_SET{}, CC.STATUSCLASSNAME, "",
W.WS_CHILD + W.WS_VISIBLE,
0, 0, 0, 0, hWnd,
SYSTEM.VAL (W.HMENU, IDC_MAIN_STATUS), W.MyInstance(), NIL);

arrWidthsSB[0] := 125;
arrWidthsSB[1] := 225;
arrWidthsSB[2] := 325;
arrWidthsSB[3] := 375;
arrWidthsSB[4] := 500;
arrWidthsSB[5] := -1;

W.SendMessage (hwndSB, CC.SB_SETPARTS, SYSTEM.VAL (W.WPARAM, LEN(arrWidthsSB)), SYSTEM.VAL (W.LPARAM, SYSTEM.ADR(arrWidthsSB)));

(* Oberon-2, не работает !!! *)
-- W.SendMessage (hwndSB, CC.SB_SETPARTS, SYSTEM.CAST (W.WPARAM, LEN(arrWidthsSB)), SYSTEM.CAST (W.LPARAM, SYSTEM.ADR(arrWidthsSB)));
-- или вот так
-- W.SendMessage (hwndSB, CC.SB_SETPARTS, SYSTEM.CAST (W.WPARAM, LEN(arrWidthsSB)), SYSTEM.CAST (W.LPARAM, SYSTEM.M2ADR(arrWidthsSB)));

END CreateStatusBar;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает Oberon-2 код
СообщениеДобавлено: Пятница, 11 Январь, 2008 08:23 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Edward Ivanov писал(а):
(* Oberon-2, не работает !!! *)
-- W.SendMessage (hwndSB, CC.SB_SETPARTS, SYSTEM.CAST (W.WPARAM, LEN(arrWidthsSB)), SYSTEM.CAST (W.LPARAM, SYSTEM.ADR(arrWidthsSB)));
-- или вот так
-- W.SendMessage (hwndSB, CC.SB_SETPARTS, SYSTEM.CAST (W.WPARAM, LEN(arrWidthsSB)), SYSTEM.CAST (W.LPARAM, SYSTEM.M2ADR(arrWidthsSB)));

Вообще-то, SYSTEM.CAST - это как раз Модула, а Оберон - SYSTEM.VAL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает Oberon-2 код
СообщениеДобавлено: Пятница, 11 Январь, 2008 10:04 

Зарегистрирован: Вторник, 18 Сентябрь, 2007 08:48
Сообщения: 108
Да, невнимательно вставил copy-paste. Извиняюсь.
Но проблема все равно остается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает Oberon-2 код
СообщениеДобавлено: Пятница, 11 Январь, 2008 10:47 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Edward Ivanov писал(а):
Да, невнимательно вставил copy-paste. Извиняюсь.
Но проблема все равно остается.

Какая проблема-то? Я указал вам на противоречие в вашем посте. Если это из-за copy-paste, то исправьте ваше первое сообщение (кнопка "правка").

Противоречие в том, что вы пишете, что не работает код на Обероне, а сами приводите в качестве неработающего код на Модуле. А тот код, который по-вашему работает - на самом деле Оберон, хотя вы почему-то называете его Модулой.
Из вашего поста я понял, что код с SYSTEM.VAL работает, а с SYSTEM.CAST - не работает. SYSTEM.VAL - процедура Оберона, а не Модулы.

Уточните, в чём по-вашему проблема.
Тулбар создали? - Да.
На Обероне? - Да.
Проблема в том, что на Модуле с помощью SYSTEM.CAST не получается?
В том, что SYSTEM.CAST работает не так, как SYSTEM.VAL?
Или ещё в чём-то?

PS: Тоже работаю на XDS Oberon-2. Правда, тулбары не создавал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает Oberon-2 код
СообщениеДобавлено: Пятница, 11 Январь, 2008 12:16 

Зарегистрирован: Вторник, 18 Сентябрь, 2007 08:48
Сообщения: 108
Тулбары тут ни при чем, мы о статусбарах.
В XDS\Samples\Generic есть проект создания простейшего гуевого приложения.
Я его модифицировал минимально, смотрите обработку сообщения WM_CREATE главного окна приложения.
Чтобы исключить коллизии, код приводить не буду, вместо этого создал архив с проектами и исходниками.
В нем две папки c исходниками - Generic (Modula-2) и Generic2 (Oberon-2).
И исполняемые файлы в них.

Проблема вот в чем - статусбар создается. В модуле он нарезается на сегменты. В обероне - нет.
Вот это мне и непонятно - код почти один в один.


Вложения:
SAMPLES.zip [82.62 КБ]
Скачиваний: 342
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает Oberon-2 код
СообщениеДобавлено: Пятница, 11 Январь, 2008 13:06 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Ну вот, совсем другое дело.

Есть такая опция компилятора: M2BASE16. По умолчанию она выключена. Если её включить, то тип INTEGER в языке Модула будет 16 бит, а по умолчанию - 32 бита. См. также опцию M2ADDTYPES.

В реализации XDS Oberon тип INTEGER всегда имеет размер 16 бит. Windows ожидает массив 32-битных чисел. В обероновских исходниках в данном случае следует использовать тип LONGINT.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает Oberon-2 код
СообщениеДобавлено: Пятница, 11 Январь, 2008 14:33 

Зарегистрирован: Вторник, 18 Сентябрь, 2007 08:48
Сообщения: 108
Александр, спасибо за отменный ответ!
В самом деле, все заработало как надо.
Придется попристальнее взглянуть на опции.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB