OberonCore https://forum.oberoncore.ru/ |
|
Не работает Oberon-2 код https://forum.oberoncore.ru/viewtopic.php?f=30&t=817 |
Страница 1 из 1 |
Автор: | Edward Ivanov [ Четверг, 10 Январь, 2008 22:56 ] |
Заголовок сообщения: | Не работает Oberon-2 код |
Привет! Я использую 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; |
Автор: | Александр Ильин [ Пятница, 11 Январь, 2008 08:23 ] |
Заголовок сообщения: | Re: Не работает Oberon-2 код |
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. |
Автор: | Edward Ivanov [ Пятница, 11 Январь, 2008 10:04 ] |
Заголовок сообщения: | Re: Не работает Oberon-2 код |
Да, невнимательно вставил copy-paste. Извиняюсь. Но проблема все равно остается. |
Автор: | Александр Ильин [ Пятница, 11 Январь, 2008 10:47 ] |
Заголовок сообщения: | Re: Не работает Oberon-2 код |
Edward Ivanov писал(а): Да, невнимательно вставил copy-paste. Извиняюсь. Но проблема все равно остается. Какая проблема-то? Я указал вам на противоречие в вашем посте. Если это из-за copy-paste, то исправьте ваше первое сообщение (кнопка "правка"). Противоречие в том, что вы пишете, что не работает код на Обероне, а сами приводите в качестве неработающего код на Модуле. А тот код, который по-вашему работает - на самом деле Оберон, хотя вы почему-то называете его Модулой. Из вашего поста я понял, что код с SYSTEM.VAL работает, а с SYSTEM.CAST - не работает. SYSTEM.VAL - процедура Оберона, а не Модулы. Уточните, в чём по-вашему проблема. Тулбар создали? - Да. На Обероне? - Да. Проблема в том, что на Модуле с помощью SYSTEM.CAST не получается? В том, что SYSTEM.CAST работает не так, как SYSTEM.VAL? Или ещё в чём-то? PS: Тоже работаю на XDS Oberon-2. Правда, тулбары не создавал. |
Автор: | Edward Ivanov [ Пятница, 11 Январь, 2008 12:16 ] | ||
Заголовок сообщения: | Re: Не работает Oberon-2 код | ||
Тулбары тут ни при чем, мы о статусбарах. В XDS\Samples\Generic есть проект создания простейшего гуевого приложения. Я его модифицировал минимально, смотрите обработку сообщения WM_CREATE главного окна приложения. Чтобы исключить коллизии, код приводить не буду, вместо этого создал архив с проектами и исходниками. В нем две папки c исходниками - Generic (Modula-2) и Generic2 (Oberon-2). И исполняемые файлы в них. Проблема вот в чем - статусбар создается. В модуле он нарезается на сегменты. В обероне - нет. Вот это мне и непонятно - код почти один в один.
|
Автор: | Александр Ильин [ Пятница, 11 Январь, 2008 13:06 ] |
Заголовок сообщения: | Re: Не работает Oberon-2 код |
Ну вот, совсем другое дело. Есть такая опция компилятора: M2BASE16. По умолчанию она выключена. Если её включить, то тип INTEGER в языке Модула будет 16 бит, а по умолчанию - 32 бита. См. также опцию M2ADDTYPES. В реализации XDS Oberon тип INTEGER всегда имеет размер 16 бит. Windows ожидает массив 32-битных чисел. В обероновских исходниках в данном случае следует использовать тип LONGINT. |
Автор: | Edward Ivanov [ Пятница, 11 Январь, 2008 14:33 ] |
Заголовок сообщения: | Re: Не работает Oberon-2 код |
Александр, спасибо за отменный ответ! В самом деле, все заработало как надо. Придется попристальнее взглянуть на опции. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |