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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Стоп, я вроде про класс окна имел ввиду. Или тут уже подразумевается другое?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:19 06-02-2009
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
Стоп, я вроде про класс окна имел ввиду. Или тут уже подразумевается другое?

Под классом имелось в виду примерно такое
TOwnButton = class
с методами, свойствами и прочим. Тогда каждый экземпляр класса - кнопка, будет иметь свою собственную сабслассенную функцию и прочие свойства (иконка итд).
Вот пример из Warp класс меню на апи, почитай, попробуй на базе него сделать класс кнопок
Подробнее...


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 14:30 06-02-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Эээ, до этого пока не доросли. )) Если только с вашей помощью. Попробую конечно...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 15:30 06-02-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
Хорошо, вот код

Код:
 
var
  iInstXML: IXMLNode;
begin
  iInstXML.NodeValue := 'F / '+
       'Ф'; //Русская буква Ф
...

На выходе я имею XML

Код:
<INST>F / &amp;#1060;</INST>

А я хочу

Код:
<INST>F / &#1060;</INST>

Как заставить воспринимать текст буквально?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 09:38 09-02-2009
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Да, спасибо - понял.
В общем, напрямо ето невозможно - MSXML принимает UTF-8 как дефолт, так что даже если сумели запихнуть &#1060 в node, он заменить на UTF8-коде. А если поставить например 'windows-1251', он поставить "Ф", а не его код.
Как workaround, можете установить енкодинг на 'US-ASCII' и добавлять текст напрямую (Ansi или Unicode - как удобно).
Пример:
Код:
  XMLDocument1.Encoding := 'US-ASCII';
...
  oNode.NodeValue := 'F / Ф';
или:
  oNode.NodeValue := 'F / '+ WideChar(1060); //Русская буква Ф
 


Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 10:33 09-02-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
Ладно, я понял, спасибо. Это не то что хочется. Пришлось сделать так же как всегда - вместо значений я присваиваю уникальные строки которые потом заменяю на те значения которые хочу. Выигрышь только в одном - о структуре я не думаю. Естественно код, как бы совместимый, однако оборнутый в стринг-реплаце. Кстати та прога скорее всего XML сама генерит.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 18:34 09-02-2009
StalkerSoftware



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всезнающий All,
 
Есть обработчик KeyPress для TEdit, внутри него есть такой код
(это проверка на текущий язык):
 
var
  buffer :array [0..KL_NAMELENGTH] of Char;
 
   GetKeyboardLayoutName(buffer);
 
(*)  if ((StrToInt('$'+ Buffer)) and $03FF) = LANG_UKRAINIAN then
 
В Delphi 7 строка (*) компилируется и работает нормально, а в Delphi 2009 получаю ошибку:
"E2008 Incompatible types".
 
Вопрос: Как правильно написать этот код, что бы он работал в Delphi 2009 ?

Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 13:57 10-02-2009
Dmiro

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware
Должно быть так
if ((StrToInt('$'+ string(Buffer))) and $03FF) = LANG_UKRAINIAN then

Всего записей: 100 | Зарегистр. 15-04-2002 | Отправлено: 18:30 10-02-2009
StalkerSoftware



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dmiro

Цитата:
Должно быть так
if ((StrToInt('$'+ string(Buffer))) and $03FF) = LANG_UKRAINIAN then

Спасибо, как доберусь до D2009 попробую.
 
Еще вопрос по D2009:
 
В том же обработчике OnKeyPress есть такой код:
 if Key in ['а'..'я', 'А'..'Я'] then
который до D2009 работал прекрасно, а вот в D2009 почему то не работает.
Пробовал его заменить на  
 if CharInSet(Key, ['а'..'я', 'А'..'Я']) then
но все равно возвращается False.
 
Вопрос: Что я тут не правильно делаю ?

Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 20:13 10-02-2009 | Исправлено: StalkerSoftware, 20:16 10-02-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware
Char - это стандарт языка паскаль, но не системы vista. string состоит из char. В системах текст может быть AnsiChar и WideChar, это значит что система может работать как со строками анси так и виде. В паскале есть одноимённые функции, но работающие с разными параметрами. Так как у Выс написано of Char, значит логично писать String. В этом случае компилятор может сделать программу работающую с анси, так же легко, без изменения текста, как и программу работающую с wide. В Delphi 2009 по умолчанию принят стандарт виде. Все остальные Delphi, до 2009 будут делать анси, по умолчанию. Ваш пример который Вы где то нашли касался строк Анси. Но Delphi 2009 это сделает со стринг=видестринг.
 
Добавлено:
StalkerSoftware
А Вы знаете в какой кодировке сохранили свою программу?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:52 10-02-2009
ZalivkoDenis



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток!
Может я не сюда, но, вдруг кто-нить подскажет. Проблема -- вообщем-то не проблема, но мучает вопрос. CG2007. Как можно перенести цветовые настройки Object Inspector с одного компа на другой? Может, там какой файлик конфигурационный перекинуть нужно?  
Спасибо.

----------
Кто к нам с чем зачем -- тот от того и того!

Всего записей: 537 | Зарегистр. 06-10-2005 | Отправлено: 21:20 10-02-2009
StalkerSoftware



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
В Delphi 2009 по умолчанию принят стандарт виде. Все остальные Delphi, до 2009 будут делать анси, по умолчанию. Ваш пример который Вы где то нашли касался строк Анси. Но Delphi 2009 это сделает со стринг=видестринг.  

Что значит "где то нашли" ? Это маленький фрагмент реально работающей программы. В D7-D2007 этот кусок работает нормально, а в D2009 нет.
 

Цитата:
А Вы знаете в какой кодировке сохранили свою программу?

В вндовой конечно, т.е. в ANSI (1251). Собственно говоря в этот формат у меня D2009 сама и сохраняет файлы.
 
Так что делать, что бы этот кусок кода нормально работал в D2009 ? Вместо букв писать их CHR коды ?

Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 20:12 11-02-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware
Если по умолчанию, но писать CHR коды не обязательно. Вот
Код:
// Стандарт (IT is. #6291.) для плагинов с паскаль скриптами.
function VNGetString(const Src: TPSVariantIFC): tbtString;
begin
  {$IFDEF DELPHI2009UP}
  Result := VNGetWideString(Src);
  {$ELSE}
  Result := VNGetAnsiString(Src);
  {$ENDIF}
end;
 
Код который Вы демонстрировали один в один похож на компонент написанный для Windows 98 на Delphi 5. Назывался TKeyboardLayout. Он использовал старую технику преобразования локального массива Char в строку. Это стандартное использование  старого винапи.
Попробуйте вместо того написать

Код:
 
var  
  buffer : string;
begin
  SetLength(buffer, KL_NAMELENGTH);  
 
   GetKeyboardLayoutName(PChar(buffer[1]));  
 

Проверить не могу.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 09:26 12-02-2009
bandyn



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите плиз
Раньше использовал Delphi 7, решил попробовать CodeGear RAD Studio 2009 Update 2 (Delphi) и сразу столкнулся с проблемой: Как прикручивать компоненты от D7, а именно компонент для работы c DBF файлами Halcyon ?
Может есть какая инструкция? Опишите все по шагам плиз...

Всего записей: 394 | Зарегистр. 18-11-2004 | Отправлено: 12:23 12-02-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bandyn скорее всего придется часть кода переписывать под 2009... все таки появилась полная зависимость от Unicode... либо как вариант искать версию с поддержкой 2009...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 12:34 12-02-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста.
Может кто сталкивался? Мне нужно в программном коде CPU, процесса поменять некоторое количество байт (приблизительно на TNewClass+vmtSelfPtr). Байты найдены корректно и величина корректная и код мой тот который меняет и тот который меняю, но... Я сразу же попадаю в системный обработчик экзепшена и наслаждаюсь тем как система начинает выяснять права. Знаю что такое работало на ура ещё в XP, но что для этого нужно Висте? Возможно ли так делать не прибегая к дебагу продуктов делающих такое?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:56 12-02-2009
kserius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть ли какая нибудь библиотека или компонент для работы из Дельфи с файлами формата HDF5 ?

Всего записей: 1 | Зарегистр. 07-02-2009 | Отправлено: 18:54 12-02-2009
StalkerSoftware



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
function VNGetString(const Src: TPSVariantIFC): tbtString;  

Не совсем понял к чему вы привели эту ф-ий и как ее использовать ...
И причем тут TKeyboardLayout ?
 
Мой второй вопрос (по поводу проверки символьного множества) ни как не связан с первым (по поводу проверки текущего языка).
 
Я просто хочу понять почему код
if Key in ['а'..'я', 'А'..'Я'] then
который до D2009 работал прекрасно (он ограничивает ввод пользователем данных в TEdit) в  D2009 почему то перестал работать ?

Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 20:15 12-02-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware
Потому, что Key у вас WideChar, а ['а'..'я', 'А'..'Я'] - AnsiChar-ы в текущей кодировке. Соответственно и коды у них разные. Поэтому CharInSet написана так:

Код:
function CharInSet(C: WideChar; const CharSet: TSysCharSet): Boolean;
begin
  Result := (C < #$0100) and (AnsiChar(C) in CharSet);
end;
Как вариант можно пока обьявить Key как AnsiChar. Может есть и другие способы, надо поглядеть Delphi2009 Handbook.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:34 12-02-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware

Цитата:
Не совсем понял к чему вы привели эту ф-ий и как ее использовать ...  

Это не только для Вас. Тот пример, как Вы поняли - обёртка, и это уже стандарт. Дело в том, что мне, как и любому программеру не всегда очевидно, что какие либо новшества можно уже воспринимать как призыв к действию. Delphi2009=Wide, хотя я бы не стал спешить, только не примите за флуд... Два байта на букву - это мало. По этому для инопланетян, земля всё ещё отсталый район. Рас переходить я бы перешёл на SuperHugeString.  
 
зы:
Кста, только в японском языке одиночных символов - иероглифов (обязательно общеупотребительных) около 60 тысячь, подумай куда остальные букавы девать?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:54 13-02-2009
   

Страницы: 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