Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
А вы сначала определитесь, что хотите делать. Ваша функция AnsiToWide очень странная: получаете какой-то AnsiString (параметр aString), и говорите компилятору, что ето WideString (хотя он вообще не такой). Потом етот псевдо-WideString делаете на AnsiString (через WideCharToString) и возвращаете результат как WideString. Совсем непонятно...
Вообще, конверсия из Ansi в Unicode нееднозначна и поетому зависима от текущий Locale. Рекомендую посмотреть TNT-pack (последняя некомерсиальная версия - 2.3.0).
 
Да, и еще - почему не так:

Код:
 
  STRING_ABOUT : WideString = 'О программе...';
  ...
  AppendMenuW(hSysMenu, MF_BYPOSITION, CONTEXT_ABOUT, PWideChar(STRING_ABOUT));
 

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:46 25-09-2008 | Исправлено: Mandor Sawall, 09:57 25-09-2008
anfilat

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TechnoDreamer
Попробуй вручную копировать строку. Примерно так:
SetLength(str1, length(str2))
Move(str2^, pointer(str1)^, length(str2) * SizeOf(WideChar))

Всего записей: 845 | Зарегистр. 12-08-2005 | Отправлено: 09:58 25-09-2008 | Исправлено: anfilat, 09:59 25-09-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergiuz1303
Да мне и 7 версия вполне подходит. =)
Mandor Sawall
Да я вообще увидел этот пример на каком-то программерском сайте (форум сурсес.ру вроде). Вот просто решил (что в результате функция возвращает) к функции приделать чтоб вайдстринг возвращала. Там был намек на то что такой подход возвращает такими манимуляциями не анси строку. Ну я и подумал что раз не анс, значит результат вайдстринговый у функции должен быть, да плюс в меню функция добавления строки с буквой w. Хотя бы дайте ссылки как сделать юникодовое приложение, ну или поправьте как должно быть. =)

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 16:51 25-09-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
А тот вариант, которой написал, не работает?

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:28 26-09-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
Работает. Но я проверить то не могу как на китайской системе, допустим, все это пойдет... Хотелось бы тогда какие-нибудь гарантии. =)
На немецком форуме программистов нашел функцию:
 

Код:
 
function AnsiToWide(Text : AnsiString; Charset : Cardinal) : WideString;
var  
  I : TCharsetInfo;
  L : Integer;
begin  
  TranslateCharsetInfo(Charset, I, TCI_SRCCHARSET);
  L := MultiByteToWideChar(I.ciACP, MB_PRECOMPOSED, @Text[1], Length(Text), nil, 0);
  SetLength(Result, L);
  MultiByteToWideChar(I.ciACP, MB_PRECOMPOSED, @Text[1], Length(Text), @Result[1], L);
end;
 

 
Использовал как:

Код:
 
STRING_ABOUT : string = 'О программе...';
///
        AppendMenuW(hSysMenu, MF_BYPOSITION, CONTEXT_ABOUT, PWideChar(AnsiToWide(STRING_ABOUT, CP_UTF8)));
 

Не знаю, правилен ли такой уж подход, либо я уже мудрить начинаю. =) Вдальнейшем мне все равно надо будет строки подавать через LoadStringW, поэтому хочется точно знать какой из способов уж точно сработает. Все равно сомнения есть. =)

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:58 27-09-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Подозреваю, что вместо CP_UTF8 должна быть кодировка, в которой закодирована STRING_ABOUT, наверно CP_1251. Но вариант, предложенный Mandor Sawall мне нравится намного больше, т к он во-первых надежнее, а во-вторых не требует лишнего кода.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 16:32 27-09-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Frodo_Torbins совершенно прав - вместо CP_UTF8 должно быть CP_1251. Но такой вариант - просто лишьные сложности.
 
В общем, принцип такой - если хотите делать unicode-программа, забудьте про AnsiString и използуйте только WideString. Конверсия через AnsiToWide будет нужна только если к вам приходят какие-то внешные AnsiStrings, но тогда должны знать кодировку.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:34 29-09-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема такая, кидаю на форму компонент AntiFreeze, а форма все равно умирает, совершенно не обновляется. Я знаю, что Indy вообще кривая штука, но не настолько же? Может, быть я все таки что то не так делаю? Проблема появилась в Indy 10, в Indy 9 - форма хоть и с глюками, но регулярно перерисовывалась и не висла.  
Сама прога скачивает по POP3 сообщения и сохраняет вложения. Заранее спасибо.

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 11:47 30-09-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Возможно эта статья: Выполнение кода в потоке без выделения его в процедуру поможет выделить тормозящий код в отдельный поток?

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 13:33 30-09-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
О Да! Спасибо огромное!

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 15:08 30-09-2008
mihmig

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такая программа EssentialPIM  
http://forum.ru-board.com/topic.cgi?forum=5&topic=24849
(органайзер)
смысл ее не важен, главное что в папке с исполняемым файлом лежит файл с данными
например test.epim (как оказалось БД в формате Firebird) и (!) один файл gds32.dll
Т.е. программа полноценно работает с БД используя только одну dll-ку! Без всяких BDE и серверов!
Хочу так-же!
Не ткнет ли кто носом в работающий пример?
 

Всего записей: 276 | Зарегистр. 25-09-2007 | Отправлено: 23:02 30-09-2008 | Исправлено: mihmig, 23:09 30-09-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihmig
Она использует БД Firebird Embedded. Скачиваешь такой дистрибутив с оффсайта и будет также

Всего записей: 3145 | Зарегистр. 29-09-2005 | Отправлено: 23:20 30-09-2008
extasy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
механизм планирования выполнения заданий: Round Robin
 
не подскажете, как реализовать сие?

Всего записей: 429 | Зарегистр. 18-05-2006 | Отправлено: 07:28 01-10-2008
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
extasy
http://www.delphi3000.com/articles/article_1896.asp?SK=

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 10:39 01-10-2008
extasy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget
Да, я тоже это находил. Смущает что "Category: Games". И не совсем понятно что там относится к гейм, а что к механизму планирования

Всего записей: 429 | Зарегистр. 18-05-2006 | Отправлено: 13:21 01-10-2008
fcdobpiy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihmig
 
тебе нужны компоненты прямого доступа к базе данных. самые популярные, но шароварные, для интербеза (фаербеда) это fibplus
ну и плюс Firebird Embedded как писал DmitryKz

Всего записей: 411 | Зарегистр. 22-08-2005 | Отправлено: 13:42 01-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Вопрос связан с плохим пониманием функции синхронизации потоков.
Вопрос такой: У меня есть два потока. В одном из них я (по нажатию клавиши) присваиваю переменной какое-то значение (с: integer - присваиваю значение 25). Во втором потоке в процедуре имеется проверка: if c=25 тогда я отсоединяюсь от pop сервера и заканчиваю скачку почты.
Вопрос такой, нужна ли в данном случае процедура synchronize? Нужна ли синхронизация потоков? То есть может ли глюкануть программа, если первый поток будет присваивать переменной значение, как раз в тот момент когда второй поток проверяет ее значение?
Заранее спасибо!

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 14:29 01-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Книга по Win2000 сервер содержит много примеров реализации семафоров критических секций и даже использование системного журнала. Лучше копать в этом направлении.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:49 01-10-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо... еще такой наверное глупый вопрос:
По какому принципу в PopupMenu нумеруются Items. Самый верхний нулевой, а дальше по порядку?  
PopupMenu1.Items[0].Enabled:=false;
PopupMenu1.Items[1].Enabled:=false;
PopupMenu1.Items[2].Enabled:=true;
А что если я через какое то время решу добавить еще один пункт и поставить его на самый верх, нумерация изменится? То есть бывший Items[0] станет Items[1] и т.д. Соответственно придется переписывать код?  
Где я не прав и как этого избежать? Заранее спасибо!

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 17:30 01-10-2008 | Исправлено: Antananarivu, 19:04 01-10-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Items также имеют свои имена (по-умолчанию N1, N2 и т.д.) можно обращаться по имени (N1.Enabled := true)

----------
www.MyFirstSite.ru - информационный ресурс для начинающих веб-мастеров

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 05:59 02-10-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru