Гость пишет:
цитата: |
Так в чем разница затратов при переносе Clipper-программ в Visual Objects и в Harbour? |
|
Это зависит от постановки задачи портирования
Если устраивает консольный режим работы программы (по типу Фара), то Вы просто перекомпилируете программу под Харбором, и получаете на выходе полноценное 32-разрядное приложение (но без графической обертки).
Если же требуется получить на выходе программу, внешне ничем не отличающуюся от любой другой Виндовой программы, то потребуется переделывать интерфейс. Например, так:
/*
* Contactos
* (C) 2003 Roberto Lopez roblez@ciudad.com.ar
*/
/*
Файл 'minigui.ch' должен быть включен во все программы MiniGUI
*/
#include "minigui.ch"
Set Procedure To ContactosAdmin
Set Procedure To TiposAdmin
Function Main
///////////////////////////////////////////////////////////////////////////////
// Инициализация RDD DBFCDX
///////////////////////////////////////////////////////////////////////////////
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
///////////////////////////////////////////////////////////////////////////////
SET DELETED ON
SET DATE FRENCH
SET CENTURY ON
SET BROWSESYNC ON
/*
У всех программ MiniGUI должно быть главное окно, которое должно быть
определено раньше любого другого окна.
*/
DEFINE WINDOW Main ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 480 ;
TITLE 'Contactos' ;
MAIN ;
ICON 'Tutor.Ico'
/*
DEFINE WINDOW: Начинается определение окна. Должно быть указано
имя окна, которое будет единственным для всей программы.
(Может быть использовано в коде одно и то же имя более одного
раза, но только одно окно может быть активно в одно и то же время)
AT: Указывает Ряд,Колонку верхнего левого угла окна (в пикселях)
WIDTH: Ширина окна, указанная в пикселях
HEIGHT: Высота окна, указанная в пикселях
TITLE: Заголовок окна
MAIN: Показывает, что определяется главное окно программы
*/
// Определение главного меню
// У каждого меню могут быть разнообразные POPUPы (подменю)
// Количество подменю не ограничено.
// После DEFINE POPUP указывается название пункта меню
// '&' используется, чтобы определить горячую клавишу, ассоциированную
// с пунктом меню. В нашем примере используется комбинация ALT+A
// Каждый пункт меню определяется посредством MENUITEM.
// Класс ACTION указывает процедуру, которая будет выполнена,
// когда пользователь выберет данный пункт меню.
// SEPARATOR включает горизонтальную линию, использованную, чтобы
// отделять пункты меню.
DEFINE MAIN MENU
DEFINE POPUP '&Archivo'
MENUITEM '&Contactos' ACTION AdministradorDeContactos()
MENUITEM '&Tipos de Contacto' ACTION AdministradorDeTipos()
SEPARATOR
MENUITEM '&Salir' ACTION EXIT PROGRAM
END POPUP
DEFINE POPUP 'A&yuda'
MENUITEM 'A&cerca de...' ACTION MsgInfo ('Tutor ABM' + Chr(13) + Chr(10) + '(c) 2003 Roberto Lopez' )
END POPUP
END MENU
// Закончено определение главного меню
// Элемент управления TOOLBAR может содержать разнообразные
// кнопки.
// Размер всех кнопок определяется с помощью
// класса BUTTONSIZE <Ширина>,<Высота>
// FLAT создает плоские кнопки
// RIGHTTEXT указывает, что текст на кнопках выводится
// справа от рисунка, помещенного на кнопку.
DEFINE SPLITBOX
DEFINE TOOLBAR ToolBar_1 FLAT BUTTONSIZE 110,35 RIGHTTEXT
BUTTON Button_1 ;
CAPTION 'Contactos' ;
PICTURE 'Contactos' ;
ACTION AdministradorDeContactos()
// CAPTION Указывает текст на кнопке.
// PICTURE Файл ассоциированного рисунка (BMP)
// ACTION Процедура события, присоединенная к кнопке
// (то, что будет выполнено, когда нажмут кнопку)
BUTTON Button_2 ;
CAPTION 'Tipos Ctto.' ;
PICTURE 'Tipos' ;
ACTION AdministradorDeTipos()
BUTTON Button_3 ;
CAPTION 'Ayuda' ;
PICTURE 'ayuda' ;
ACTION MsgInfo ('Tutor ABM' + Chr(13) + Chr(10) + '(c) 2003 Roberto Lopez' )
END TOOLBAR
END SPLITBOX
// Строка состояния, которая появляется в нижней части от окна.
// У нее могут быть разнообразные секции, определенные посредством STATUSITEM
// Существуют опциональные предопределенные секции
// CLOCK и DATE (они показывают часы и текущую дату)
DEFINE STATUSBAR
STATUSITEM "(c) 2003 Roberto Lopez roblez@ciudad.com.ar"
CLOCK
DATE
END STATUSBAR
// Закончено определение окна
END WINDOW
// Требуется развернуть окно на весь экран
MAXIMIZE WINDOW Main
// Выводим окно на экран
ACTIVATE WINDOW Main
// Команда ACTIVATE WINDOW устанавливает состояние ожидания.
// Программа будет остановлена в этой точке до тех пор, пока окно
// не будет закрыто интерактивно или программно. При этом будут выполняться
// только процедуры событий, присоединенные к элементам управления окна
// (или к самому окну)
Return
Готовые примеры программ и необходимый бесплатный инструментарий можно посмотреть по адресу:
http://minigui.mylivepage.ru/file/index