Форум » [x]Harbour » Ряд вопросов по языку » Ответить

Ряд вопросов по языку

Dimka: 1. есть ли документация по Harbour на русском языки или на анлийском но полностью))) 2. есть ли в языке "сырые" строки. то есть форматирование вида "а[%d, %d]=%d" % {i, j, x} ? 3. как пользоваться оператором $ применительно к различным типам данных, не только строкам. 4. насколько развито ооп? есть ли наследование и т.д. 5. можно ли переопределять операторы? 6. какие существую функции для работы с Hash-ами? 7. вопрос по миниджиюай. есть ли менеджер размещения? то есть класс, который облегчает размещение виджетов(компонент) на форме?

Ответов - 45, стр: 1 2 3 All

Петр: 1) нет. 2) функции Sql_sprintf, StrFormat ( contrib\hbmisc.lib) 3) см. п.5 4) достаточно развито , есть в т.ч. и множественное, конструкторы, деструкторы в наличии; 5) перегрузка операторов возможна 6) много разных EXTERNAL HB_HASH EXTERNAL HB_HHASKEY EXTERNAL HB_HPOS EXTERNAL HB_HGET EXTERNAL HB_HSET EXTERNAL HB_HDEL EXTERNAL HB_HKEYAT EXTERNAL HB_HVALUEAT EXTERNAL HB_HPAIRAT EXTERNAL HB_HDELAT EXTERNAL HB_HKEYS EXTERNAL HB_HVALUES EXTERNAL HB_HFILL EXTERNAL HB_HCLONE EXTERNAL HB_HCOPY EXTERNAL HB_HMERGE EXTERNAL HB_HEVAL EXTERNAL HB_HSCAN EXTERNAL HB_HCASEMATCH EXTERNAL HB_HAUTOADD EXTERNAL HB_HALLOCATE EXTERNAL HB_HDEFAULT EXTERNAL HB_HSETAUTOADD EXTERNAL HB_HSETCASEMATCH 7) MiniGUI не обьектная библиотека и такого класса конечно же нет, но в поставке есть пример как размещать пользовательские контролы на форме.

Dimka: 1. очень плохо. что читать, кроме примеров? 3. как использовать $ с числами, не перегружая? 5. как выглядит перегрузка операторов? можно примеры?

Петр: 1. Справочники по Clipper, xHarbour и самое главное исходники Harbour. 3. $ это так критично ? Чем AScan( {1, 2, 4}, 2 ) не устраивает? 5. Примерно так #include "hbclass.ch" create class tString VAR cValue METHOD New(cText) INLINE ::cValue := cText, self OPERATOR "=" ARG cArg INLINE ::cValue = cArg OPERATOR "==" ARG cArg INLINE ::cValue == cArg OPERATOR "!=" ARG cArg INLINE ::cValue != cArg OPERATOR "<" ARG cArg INLINE ::cValue < cArg OPERATOR "<=" ARG cArg INLINE ::cValue <= cArg OPERATOR ">" ARG cArg INLINE ::cValue > cArg OPERATOR ">=" ARG cArg INLINE ::cValue >= cArg OPERATOR "+" ARG cArg INLINE ::cValue + cArg OPERATOR "-" ARG cArg INLINE ::cValue - cArg OPERATOR "$" ARG cArg INLINE ::cValue $ cArg OPERATOR "[]" ARG nIndex INLINE iif( pcount()>2, ; ::cValue := stuff( ::cValue, nIndex, 1, hb_pvalue(3) ), ; substr( ::cValue, nIndex, 1 ) ) endclass


Dimka: 3. тем, что вот такая запись 2 $ {1, 2, 3} выглядит лучше, чем такая: empty(AScan( {1, 2, 4}, 2 ) )

gfilatov: Петр пишет: в поставке есть пример как размещать пользовательские контролы на форме Он находится в папке minigui\samples\Advanced\ControlPos

Петр: Dimka пишет: тем, что вот такая запись 2 $ {1, 2, 3} выглядит лучше, чем такая: empty(AScan( {1, 2, 4}, 2 ) ) Очень серьезный аргумент. Если вам нравиться запись в стиле 2 $ {1, 2, 3} или 2 IN {1, 2, 3}, то используйте ее, предварительно перекомпилировав Harbour c C_USR= -DHB_EXTENSION. P.S. Извиняюсь, включив xhb.ch и подключив xhb.lib

Dimka: насмотрелся пример Samles\Advanced\Report_Interpreter\ решил заюзать. не нашел нигде описание процедуры Winrepint. ни гугл, ни янденкс, ни справка, ни исходники(:-D) не знают о такой. 1. где взять описание? 2. что из себя представляет текст ReportS.mod из примера? обычный код харбора или нет? 3. что такое [Declare]80/PREV (из *.mod)? 4. можно ли использовать в шаблоне несколько бд? 5. сохранятся ли возможности группировки при использовании массивов? 6. откуда берутся переменные m (m->npag), NLINE (@NLINE, 0 SAY ...) ? слишком много магии. 7. можно ли заюзать подряд 2 winrepint для создания 1 документа? и если можно, то как? или каким-либо другим образом реализовать вызов 1 шаблона из другого.

gfilatov: Dimka пишет: не нашел нигде описание процедуры Winrepint А в папке minigui\Doc файл WinReport.chm не догадался посмотреть?

Dimka: жду ответы на вопросы с номерами 5 и 7. можно ли исполнить код winreporta не из файла, а из строки?

gfilatov: Dimka пишет: можно ли исполнить код winreporta не из файла, а из строки? Нет, только из файла с описанием отчета. Если требуется использовать описание отчета в коде программы, то для этого существует команда DO REPORT. Пример использования: DO REPORT; TITLE 'INFORME DE ARTISTAS DE CINE | segundo titulo'; HEADERS {'','','',''} , {'SIMPLE','APELLIDO','DOBLE','INGRESOS'} ; FIELDS {'code','last','BIO','incoming'} ; WIDTHS {10,20,26,14} ; TOTALS {.F.,.F.,.F.,.T.} ; NFORMATS {'','','','@E 99,999,999.99'} ; WORKAREA Test ; LPP 55 ; CPL 77 ; LMARGIN 3 ; TMARGIN 3 ; PAPERSIZE DMPAPER_A4 ; PREVIEW ; SELECT ; MULTIPLE ; GROUPED BY 'first' ; HEADRGRP 'Name'

Dimka: короче задача стоит следующим образом. надо из нескольких баз и массивов сваять 1 отчет для распечатки с предпросмотром. использование winreporta обуславливается возможностью переноса таблицы при разрыве строки с сохранением заголовка. выравнивание текста и т.д. Winreport мне здесь не поможет? убирается ли вотермарк? если его так можно назвать))))

Петр: Dimka пишет: короче задача стоит следующим образом. Фу ты блин, а я уже думал, что тут экзамен устроили Где вы там водяные знаки увидели, может быть splash ?

Dimka: ну квадратик в правом нижнем углу.

Петр: Вам доступен весь код - правьте как хотите и пользуйтесь

Pasha: Dimka пишет: что вот такая запись 2 $ {1, 2, 3} выглядит лучше в xHarbour это реализовано. Предложите перенести поддержку массивов в операции HB_P_INSTRING какому-нибудь Harbour-девелоперу

Dimka: Петр пишет: Вам доступен весь код - правьте как хотите и пользуйтесь это уже хак. не тру.

Петр: Pasha пишет: в xHarbour это реализовано. В Harbour это реализовано, нужно просто использовать xhb.lib (xhb.ch). Предложение сделать это по умолчанию (кстати, предложенное Пржемеком) не набрало голосов в поддержку, демократия

Петр: Dimka пишет: это уже хак. Это не хак, а Open Source. В знак благодарности, или по доброте душевной, можете усовершенствовать код и предложить его сообществу, например, устраните мерцание в превью

Dimka: так мне кто-нибудь ответит на этот вопрос? надо из нескольких баз и массивов сваять 1 отчет для распечатки с предпросмотром. желание использовать winreport обуславливается возможностью переноса таблицы при разрыве страницы с сохранением заголовка. выравнивание и перенос текста и т.д. Winreport мне может в этом помочь?

Dimka: и как быть, если какая-то часть отчетов общая и ее необходимо использовать повторно? отходить от принципа DRY тоже не тру.

Dimka: решил отказаться от Winreport ввиду скромных возможностей))) пишу сам генератор отчетов))) есть такой код: ... START DOC START PAGE @ 10, 10, 100, 100 draw text "бла бла бла" style DT_LEFT END PAGE END DOC ... в style задаются параметры отображения строки в прямоугольнике. если написать "style DT_CALCRECT", то строка рисоваться не будет, а функция win api, которая вызывается, вернет прямоугольник, в который эта строка должна поместиться. конечно же ничего не возвращается. каковы минмиальные действия, чтобы этого добиться?

SADSTAR2: Править библиотеку. См. мой постинг в ветке MiniGUI или http://ssmessages.by.ru/hbprint1.html

Dimka: спасибо. вашу тему читал, исправления делал)))

SADSTAR2: И какой результат?

Dimka: как определить функцию с необязательными параметрами?

Pasha: Dimka пишет: как определить функцию с необязательными параметрами? Что имеется в виду ? При вызове функции любой фактический параметр может быть опущен В теле функции при этом надо проверять: if xParN <> nil Если имеется в виду переменное число параметров, то см. tests\varparam.prg

Dimka: примерное такое. function fun(param1, param2, param3=1, param4=2) ... return 1 fun(5, 6) fun(5, 6, 7) tests\varparam.prg у меня нет. harbour\minigui

Pasha: Dimka пишет: tests\varparam.prg у меня нет. harbour\minigui См. каталог [x]Harbour\tests Dimka пишет: function fun(param1, param2, param3=1, param4=2) Используй стандартный прием Clipper/Harbour: #include "common.ch" ... function fun(param1, param2, param3, param4) default ; param3 to 1,; param4 to 2

Dimka: можно ли сделать так чтобы все имена, определяемые внутри функции или метода, были локальными?

Dimka: SADSTAR2 пишет: И какой результат? не знаю как поиметь результат вызова функции drawtext.

Dimka: как передаются параметры в функцию? создаются копии фактических параметров, которые и передаются? если да, то как передать указатель и работать потом с такими параметрами?

Pasha: Dimka пишет: как передаются параметры в функцию? создаются копии фактических параметров, которые и передаются? если да, то как передать указатель и работать потом с такими параметрами? Массивы и обьекты классов передаются по ссылке, переменные остальных типов данных - по значению, т.е. создаются копии фактических параметров Чтобы передать параметр по ссылке, надо указать символ @ перед именем фактического параметра: p1 := 0 func1(@p1, @p2) ? p1 // результат - 1 ... function func1(p1, p2) p1 := 1 retu nil

Dimka: а хеши, надо полагать, тоже по ссылке. есть ли в харбор аналог Python-овского метода хешей - get? то есть get(hash, x, default) вернет hash[x], если x - ключ hash, или default, если нет такого ключа.

Петр: Dimka пишет: есть ли в харбор аналог Python-овского метода хешей - get? Нет function PyGet( hash, x, default ) return iif( hb_HHasKey(hash, x), hash[x], default )

Петр: Dimka пишет: можно ли сделать так чтобы все имена, определяемые внутри функции или метода, были локальными? function test() local a, b, c local xyz .. RTFM

Dimka: Петр пишет: function PyGet( hash, x, default ) return iif( hb_HHasKey(hash, x), hash[x], default ) Спасибо, я уже написал. Петр пишет: function test() local a, b, c local xyz я имел ввиду, без local. то есть все определяемые имена по умолчанию считаются локальными. имхо, так гораздо удобнее и правильнее. Петр пишет: RTFM ссылку, пожалуйста.

Петр: Dimka пишет: имхо, так гораздо удобнее и правильнее Я так не считаю. Явное объявление переменных и использование ключей компиляции позволяют лучше контролировать программу. Не забывайте, что Harbour наследник Clipper, а не какого либо другого языка. Поэтому использует синтаксис и правила Clipper. Поэтому и RTFM Документацию по Clipper, в т.ч. и руссифицированую можете найти на сайте этого форума.

Dimka: а как красиво записать длинную строку (s="Длинная предлинная строка. Длинная предлинная строка. Длинная предлинная строка. Длинная предлинная строка. Длинная предлинная строка. Длинная предлинная строка." ) так чтобы она помещалась на экране редактора. конкатенация - не красиво.

Dimka: ОМГ!!! я тут узнал, что в харборе для работы с dbf нет запросов. есть лишь простейшие операции поиска, фильтрации и никакой релятивисткой алгебры!!!!!!!!! как же вы с ними работаете. я в шоке.

gfilatov: Dimka пишет: в харборе для работы с dbf нет запросов А никто не заставляет работать только с dbf форматом. Вы можете использовать бесплатные MySQL/PosgreSQL/SQLite/FireBird и т.п.

Dimka: заставляет))))

КСС: Тогда используй ADS (Advantage Database Server). Сильная штука

Dimka: можно поподробнее про это, а так же про LetoDB? это терминальные субд? как там реализуются запросы?

Andrey: Dimka пишет: а так же про LetoDB? это терминальные субд? как там реализуются запросы? Читай в той ветке ! И что это за новый термин такой: "терминальные субд" ?

КСС: Про ADS можно почитать для начала здесь http://www.hotsoft.ru/ADS/index.htm Документация по работе с Clipper+ADS имеется в NG файле, а также хорошо документированы функции по работе с ADS и в самом Харборе - огромное спасибо Александру Кресину. Это очень мощная DB и поддерживает столько всего, чего в некоторых других и нет. Кроме того, она может работать как со своим стандартом таблиц данных ADT/ADI, так и с DBF/CDX. Эта DB имеет бесплатный комплект библиотек для организации локального подключения к таблицам данных (не клиент-сервер) с использованием её команд и функций, а это означает, что разработчик может создать программу, обкатать (с некоторыми ограничениями) и даже установить клиенту с локальным подключением, а при увеличении объема данных и нагрузки клиент пусть покупает полный клиент-серверный ADS. Перенастраивать программу даже и не прийдётся, если предварительно проверять наличие удалённого или локального AD-сервера. LetoDB - это также творение (как и RDD ADS) Александра Кресина. Я лично ни разу не тестировал, но читаю соответствующую ветку на этом форуме регулярно - это должен быть отличный сервер, многие уже сейчас от него в восторге. Но SQL-запросы, по-моему, он ещё не поддерживает, хотя для тех, кто собрался здесь они не очень-то и нужны.



полная версия страницы