Форум » [x]Harbour » Помогите советом начинающему... » Ответить

Помогите советом начинающему...

Urri: Тут вот надумал переползти на xHarbour. Возникла следующая проблема: имена всех функций и подпрограмм дополняются префиксом HB_FUN_. А можно ли этого избежать так, чтобы остались родные, начальные имена. У меня весь софт построен на скриптах, в которых уже стоят вызовы функций и процедур по привычным, родным именам. И перелопатить везде в 5000 текстовых файлах-скриптах вызовы функций и поменять на новые - задача крайне утомительная с непонятной перспективой на успех.

Ответов - 294, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Andrey: Urri пишет: 2. Можно ли заставить xHarbour реагировать на нажатие CTRL/ALT/(буква, цифра или Enter). В клиппере это срабатывало без проблем, а здесь никак. А пользователи привыкли к определенным комбинациям и переучить их очень трудно. Да и для своих нужд эти кнопки приспособили, привыкли. 3. Клавиатура настроена на 3 раскладки: лат/рус/укр. Нажатие левый Alt/(буква) работает при любой из трех раскладок, а вот правый Alt/(буква) работает только при лат. или рус., а при укр. - не работает. С чего бы это? Форум заключен не только на этой странице... Смотри http://clipper.borda.ru/?1-4-15-00000452-000-0-0-1245391628

Urri: Доброе утро. Andrey пишет: Форум заключен не только на этой странице... Смотри http://clipper.borda.ru/?1-4-15-00000452-000-0-0-1245391628 Нечего тут строгость разводить. Я конечно уже эту страницу видел. Предложенным там способом не воспользовался, сделал по-своему и меня все устраивало до того момента, пока не пришлось добавить еще и укр. раскладку. А вот на ней правый Alt/буква вообще никак не реагирует, так же как и при нажатии CTRL/ALT/(цифра,буква). В предыдущем письме AlKresin предположил, что "Windows берет обработку таких сочетаний на себя, не передавая их пользовательской программе". Ну может в такой ситуации это и понятно (а почему тогда для Клиппера Windows ленился брать обработку на себя), а вот почему для рус. правый ALT/буква работает, а для укр. правый ALT/буква - снова "берет обработку на себя"

Петр: Urri пишет: Ну может в такой ситуации это и понятно (а почему тогда для Клиппера Windows ленился брать обработку на себя) Если бы вы за три месяца статуса "начинающего" не ленились хоть что-то узнать о модели ввода с клавиатуры в Windows и о исполнении 16 битных программ в Win32, вы бы таких вопросов не задавали. В общем RTFM.


Urri: Добрый вечер. Подскажите.... Имеется такая скромная ф-ци function rupper(txt) return upper(txt) (по тексту понятно: переводит txt в верхний регистр) Стал замечать странности в работе, а также отсутствие такого перевода для украинской кодовой страницы заставило вспомнить давно и успешно работающую с Клиппером Си - шную ф-цию. Была исправлена под xHarbour согласно рекомендациям AlKresin и теперь имеет такой вид HB_FUNC( RUPPER ) { /* par1 - исх.строка */ int i,j,n=hb_parclen(1); char *str=hb_parc(1),*str1; str1 = hb_xgrab( n ); memcpy( str1, str, n ); for(i=0;i<n;i++) { j=str1; if (j<'a') continue; if ((j>='а') && (j<='п')) { str1-='\x20'; continue; }; if ((j>='р') && (j<='я')) { str1-='\x50'; continue; }; if ((j>='a') && (j<='z')) { str1-='\x20'; continue; }; if (j=='ё') { str1='Ё'; continue; }; if (j=='є') { str1='Є'; continue; }; if (j=='ї') { str1='Ї'; continue; }; }; if( ISBYREF(1) ) hb_storclen( str1, n, 1 ) ; hb_retclen_buffer( str1, n ); } После этого все сломалось, программа вылетает с кодом 9003. И что я сделал не так?

Pasha: А ошибка часом не 9023 ? Она возникает, если hb_xgrab вызывается с параметром 0 т.е, надо изменить вызов на str1 = hb_xgrab( n + 1 ); либо добавить проверку на 0

Urri: Павел, спасибо за ответ. Я уже попадался на такую ошибку, но, как говорил Шарапов, глаз "замылился" Добавил перед строкой str1 = hb_xgrab( n ); такой текст: if (n==0) { hb_retclen( str, n ); return; } Продолжает вылетать с ошибкой как и раньше. Тогда я еще заменил на (это из разряда дополнительной перестраховки) str1 = hb_xgrab( n+1 ); На удивление, вылетать перестало, но работает неправильно: в верхний регистр не переводит (Си-шная ф-ция из Клиппера никогда не подводила) Подскажи еще, пожалуйста, ф-ция hb_retclen_buffer( str1, n ); освобождает буфер, распределенный по hb_xgrab( n ); , или нужно заботиться об этом дополнительно и применять hb_xfree (str1);?

Pasha: Urri пишет: Подскажи еще, пожалуйста, ф-ция hb_retclen_buffer( str1, n ); освобождает буфер, распределенный по hb_xgrab( n ); , или нужно заботиться об этом дополнительно и применять hb_xfree (str1);? Нет, вызывать hb_xfree не надо. Странно, у меня такая функция сработала - строку в верхний регистр перевела.

Urri: Pasha пишет: Странно, у меня такая функция сработала - строку в верхний регистр перевела. Да что же за невезуха такая???!!! Вынес эту ф-цию из большой задачи в тестовый пример - не работает, зараза. Павел, может дашь свой тестовый пример с использованием этой ф-ции, в котором она заработала. А то я уже не знаю где копать.

Pasha: Сделайте так: [pre] HB_FUNC( RUPPER ) { /* par1 - исх.строка */ int i,n=hb_parclen(1); char *str=hb_parc(1),*str1; unsigned char c; str1 = hb_xgrab( n + 1 ); memcpy( str1, str, n ); for(i=0;i<n;i++) { c=str1; if (c<97) continue; if ((c>=160) && (c<=175)) { str1-='\x20'; continue; }; if ((c>=224) && (c<=239)) { str1-='\x50'; continue; }; if ((c>=97) && (c<=122)) { str1-='\x20'; continue; }; if (c==241) { str1='Ё'; continue; }; if (c==243) { str1='Є'; continue; }; if (c==245) { str1='Ї'; continue; }; }; if( ISBYREF(1) ) hb_storclen( str1, n, 1 ) ; hb_retclen_buffer( str1, n ); } [/pre]

Urri: Спасибо Павел. Я тоже такой выход уже нашел: добавил промежуточной печати и получил для 'а' отрицательное число (и для других явных литералов тоже). Поставил конкретные коды вместо литералов - все заработало. Это что - особенности С для Нарбора? И почему нужно выделять на один байт больше, чем нужно, если я точно знаю, что строка для преобразования не пустая?

Pasha: Urri пишет: Это что - особенности С для Нарбора? Нет таких особенностей см. флаги bcc32: -K Default char is unsigned по умолчанию этот флаг выключен, т.е. константы char будут signed Если это флаг установить, то эти константы будут unsigned, и их можно сравнивать с int.

Pasha: Urri пишет: И почему нужно выделять на один байт больше, чем нужно, если я точно знаю, что строка для преобразования не пустая? Вчера не заметил этот вопрос Если есть проверка на 0 перед hb_xgrab, то ее можно вызывать с параметром n Если такой проверки нет, то надо вызывать hb_xgrab(n+1), чтобы избежать ошибки 9023

Urri: Pasha пишет: Если есть проверка на 0 перед hb_xgrab, то ее можно вызывать с параметром n Если такой проверки нет, то надо вызывать hb_xgrab(n+1), чтобы избежать ошибки 9023 Проверка конечно есть, но даже с проверкой приходится выделять (n+1), вот что интересно. Иначе работает с ошибкой. (проверил сейчас еще раз)

imar2: Помогите новичку,пожалуйста! Проблема в следующем: есть DBF-файл в ДОС кодировке. При попытке вывести его в TBrowse вместо русских букв крякозябры Причем крякозябры одинаковые при USE wrmo0907 CODEPAGE "RU866" и USE wrmo0907 CODEPAGE "RU1251" Русские буквы появляются только при использовании шрифта Terminal, но тогда заголовки колонок крякозябрами Что делать?



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