Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1
Зарегистрирован: 21.04.09
|
|
Отправлено: 21.04.09 15:43. Заголовок: Помогите советом начинающему...
Тут вот надумал переползти на xHarbour. Возникла следующая проблема: имена всех функций и подпрограмм дополняются префиксом HB_FUN_. А можно ли этого избежать так, чтобы остались родные, начальные имена. У меня весь софт построен на скриптах, в которых уже стоят вызовы функций и процедур по привычным, родным именам. И перелопатить везде в 5000 текстовых файлах-скриптах вызовы функций и поменять на новые - задача крайне утомительная с непонятной перспективой на успех.
|
|
|
Ответов - 294
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 890
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.07.09 21:32. Заголовок: Urri пишет: 2. Можн..
Urri пишет: цитата: | 2. Можно ли заставить xHarbour реагировать на нажатие CTRL/ALT/(буква, цифра или Enter). В клиппере это срабатывало без проблем, а здесь никак. А пользователи привыкли к определенным комбинациям и переучить их очень трудно. Да и для своих нужд эти кнопки приспособили, привыкли. 3. Клавиатура настроена на 3 раскладки: лат/рус/укр. Нажатие левый Alt/(буква) работает при любой из трех раскладок, а вот правый Alt/(буква) работает только при лат. или рус., а при укр. - не работает. С чего бы это? |
| Форум заключен не только на этой странице... Смотри http://clipper.borda.ru/?1-4-15-00000452-000-0-0-1245391628
|
|
|
|
| постоянный участник
|
Пост N: 130
Зарегистрирован: 21.04.09
|
|
Отправлено: 31.07.09 08:32. Заголовок: Доброе утро. Andrey..
Доброе утро. Andrey пишет: Нечего тут строгость разводить. Я конечно уже эту страницу видел. Предложенным там способом не воспользовался, сделал по-своему и меня все устраивало до того момента, пока не пришлось добавить еще и укр. раскладку. А вот на ней правый Alt/буква вообще никак не реагирует, так же как и при нажатии CTRL/ALT/(цифра,буква). В предыдущем письме AlKresin предположил, что "Windows берет обработку таких сочетаний на себя, не передавая их пользовательской программе". Ну может в такой ситуации это и понятно (а почему тогда для Клиппера Windows ленился брать обработку на себя), а вот почему для рус. правый ALT/буква работает, а для укр. правый ALT/буква - снова "берет обработку на себя"
|
|
|
|
| постоянный участник
|
Пост N: 727
Зарегистрирован: 09.10.06
|
|
Отправлено: 31.07.09 11:35. Заголовок: Urri пишет: Ну може..
Urri пишет: цитата: | Ну может в такой ситуации это и понятно (а почему тогда для Клиппера Windows ленился брать обработку на себя) |
| Если бы вы за три месяца статуса "начинающего" не ленились хоть что-то узнать о модели ввода с клавиатуры в Windows и о исполнении 16 битных программ в Win32, вы бы таких вопросов не задавали. В общем RTFM.
|
|
|
|
| постоянный участник
|
Пост N: 133
Зарегистрирован: 21.04.09
|
|
Отправлено: 13.08.09 21:55. Заголовок: Добрый вечер. Подска..
Добрый вечер. Подскажите.... Имеется такая скромная ф-ци 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. И что я сделал не так?
|
|
|
|
| Администратор
|
Пост N: 1204
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.08.09 08:20. Заголовок: А ошибка часом не 90..
А ошибка часом не 9023 ? Она возникает, если hb_xgrab вызывается с параметром 0 т.е, надо изменить вызов на str1 = hb_xgrab( n + 1 ); либо добавить проверку на 0
|
|
|
|
| постоянный участник
|
Пост N: 134
Зарегистрирован: 21.04.09
|
|
Отправлено: 14.08.09 10:26. Заголовок: Павел, спасибо за от..
Павел, спасибо за ответ. Я уже попадался на такую ошибку, но, как говорил Шарапов, глаз "замылился" Добавил перед строкой 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);?
|
|
|
|
| Администратор
|
Пост N: 1205
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.08.09 11:12. Заголовок: Urri пишет: Подскаж..
Urri пишет: цитата: | Подскажи еще, пожалуйста, ф-ция hb_retclen_buffer( str1, n ); освобождает буфер, распределенный по hb_xgrab( n ); , или нужно заботиться об этом дополнительно и применять hb_xfree (str1);? |
| Нет, вызывать hb_xfree не надо. Странно, у меня такая функция сработала - строку в верхний регистр перевела.
|
|
|
|
| постоянный участник
|
Пост N: 135
Зарегистрирован: 21.04.09
|
|
Отправлено: 14.08.09 11:56. Заголовок: Pasha пишет: Странн..
Pasha пишет: цитата: | Странно, у меня такая функция сработала - строку в верхний регистр перевела. |
| Да что же за невезуха такая???!!! Вынес эту ф-цию из большой задачи в тестовый пример - не работает, зараза. Павел, может дашь свой тестовый пример с использованием этой ф-ции, в котором она заработала. А то я уже не знаю где копать.
|
|
|
|
| Администратор
|
Пост N: 1206
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.08.09 16:42. Заголовок: Сделайте так: HB_..
Сделайте так: цитата: | 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 ); } |
|
|
|
|
|
| постоянный участник
|
Пост N: 136
Зарегистрирован: 21.04.09
|
|
Отправлено: 15.08.09 12:35. Заголовок: Спасибо Павел. Я тож..
Спасибо Павел. Я тоже такой выход уже нашел: добавил промежуточной печати и получил для 'а' отрицательное число (и для других явных литералов тоже). Поставил конкретные коды вместо литералов - все заработало. Это что - особенности С для Нарбора? И почему нужно выделять на один байт больше, чем нужно, если я точно знаю, что строка для преобразования не пустая?
|
|
|
|
| Администратор
|
Пост N: 1207
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.08.09 09:42. Заголовок: Urri пишет: Это что..
Urri пишет: цитата: | Это что - особенности С для Нарбора? |
| Нет таких особенностей см. флаги bcc32: -K Default char is unsigned по умолчанию этот флаг выключен, т.е. константы char будут signed Если это флаг установить, то эти константы будут unsigned, и их можно сравнивать с int.
|
|
|
|
|
| Администратор
|
Пост N: 1208
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.08.09 09:31. Заголовок: Urri пишет: И почем..
Urri пишет: цитата: | И почему нужно выделять на один байт больше, чем нужно, если я точно знаю, что строка для преобразования не пустая? |
| Вчера не заметил этот вопрос Если есть проверка на 0 перед hb_xgrab, то ее можно вызывать с параметром n Если такой проверки нет, то надо вызывать hb_xgrab(n+1), чтобы избежать ошибки 9023
|
|
|
|
| постоянный участник
|
Пост N: 137
Зарегистрирован: 21.04.09
|
|
Отправлено: 19.08.09 13:03. Заголовок: Pasha пишет: Если е..
Pasha пишет: цитата: | Если есть проверка на 0 перед hb_xgrab, то ее можно вызывать с параметром n Если такой проверки нет, то надо вызывать hb_xgrab(n+1), чтобы избежать ошибки 9023 |
| Проверка конечно есть, но даже с проверкой приходится выделять (n+1), вот что интересно. Иначе работает с ошибкой. (проверил сейчас еще раз)
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 25.08.09 13:13. Заголовок: Помогите новичку,пож..
Помогите новичку,пожалуйста! Проблема в следующем: есть DBF-файл в ДОС кодировке. При попытке вывести его в TBrowse вместо русских букв крякозябры Причем крякозябры одинаковые при USE wrmo0907 CODEPAGE "RU866" и USE wrmo0907 CODEPAGE "RU1251" Русские буквы появляются только при использовании шрифта Terminal, но тогда заголовки колонок крякозябрами Что делать?
|
|
|
Ответов - 294
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|