Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Вниз

Особенности перевода проектов на Delphi 2009(10)   Найти похожие ветки 

 
Andjey   (2009-12-10 13:36) [0]

Подкиньте толковую статью про Юникод. Интересно, какие трудности могут возникнуть при переводе своих проектов на Delphi 2009(10) ? Или не все так страшно? Гуглешь дает какие то поверхностные объяснения юникода впринципе. Хотелось бы почитать про него применительно к проектам Delphi.


 
clickmaker ©   (2009-12-10 13:51) [1]

> какие трудности могут возникнуть при переводе своих проектов
> на Delphi 2009(10) ?

замена AnsiString на String (если нужно, конечно)
выискивать места, где делается допущение, что размер символа = 1 байту
ну и все в таком духе


 
@!!ex ©   (2009-12-10 13:57) [2]

Насколько знаю, достаточно по всему проекту пройтись с реплейсом string на AnsiString
и все.


 
Игорь Шевченко ©   (2009-12-10 13:57) [3]

А что, Embarcadero совсем ничего не пишет или еще один разучившийся пользоваться поиском ?


 
AntiUser   (2009-12-10 14:01) [4]

Бойтесь посетители ДМ! ИШ не в духе.


 
Dimka Maslov ©   (2009-12-10 14:10) [5]


> Насколько знаю, достаточно по всему проекту пройтись с реплейсом
> string на AnsiString
> и все


Действительно так, однако после этого начинается куча warningoв по поводу возможной потери данных при преобразованиях из юникода и в юникод. Лечится соотв. настройками.
И вообще мне лично показалось, что вся юникодовость Delphi 2009 - разводка, строки обычные, а при вызовах WinAPI строки неявно преобразуются в юникод и обратно.


 
clickmaker ©   (2009-12-10 14:18) [6]

> И вообще мне лично показалось, что вся юникодовость Delphi
> 2009 - разводка, строки обычные

SizeOf("обычная строка") = ?


 
clickmaker ©   (2009-12-10 14:20) [7]

хотя, что это я... 4 вернет


 
Кто б сомневался ©   (2009-12-10 14:24) [8]


> Насколько знаю, достаточно по всему проекту пройтись с реплейсом
> string на AnsiString
> и все.


Такое делать как раз не надо.
Лучше потратить день-два на просмотр всего кода. у меня вообще перевод занял около двух часов с D7 на D2009 проект среднего размера.


 
Кто б сомневался ©   (2009-12-10 14:25) [9]


> И вообще мне лично показалось, что вся юникодовость Delphi
> 2009 - разводка, строки обычные,


Показалось просто. Бывает.


 
Andjey   (2009-12-10 14:43) [10]

Что-то как-то [1] и [2] протеворечат друг другу. AnsiString --> String или String --> AnsiString ? Кто ошибся? А на толковую статью так никто и не укажет? Может у кого в личных архивах есть... Если только проблема в строковом преобразовании, то смысл было новую оболочку писать? Патч какой придумали и все. :)


> Кто б сомневался ©   (10.12.09 14:24) [8]
>Лучше потратить день-два на просмотр всего кода. у меня вообще перевод >занял около двух часов с D7 на D2009 проект среднего размера.

Так в чем конкретно заключался перевод?


 
clickmaker ©   (2009-12-10 15:11) [11]

> AnsiString --> String или String --> AnsiString ? Кто ошибся?

оба правы.
если нужно, чтобы проект стал полностью уникодным, нужно убрать случайно затесавшиеся AnsiString. Хотя, обычно их явно никто и не использует.
если нужно, чтобы проект не поддерживал уникод, заменить string на ansistring. Только нафуа тогда переходить на 2009?


 
Кто б сомневался ©   (2009-12-10 15:25) [12]


> Так в чем конкретно заключался перевод?


В тех конструкция где вы плотно работаете именно с ANSI строками .
типа
Move

var
  Count: Integer;
  Buf1, Buf2: array[0..255] of Char;
begin
  // Существующий код - неправильный, потому что string = UnicodeString
  Count := Length(Buf1);
  Move(Buf1, Buf2, Count);
 
  // Правильный код для Юникода
  Count := SizeOf(Buf1);                // <<-- Задание размера буфера в байтах
  Count := Length(Buf1) * SizeOf(Char); // <<-- Задание размера буфера в байтах
  Move(Buf1, Buf2, Count);
end;


Или FillChar если вы указывали констатнту (хотя я использую ZeroMemory для обнуления), либо если вы указывали символ.
В таком коде , или подобному ему
var
  Count: Integer;
  Buffer: array[0..255] of Char;
begin
  // Существующий код - неправильный, потому что string = UnicodeString
  Count := Length(Buffer);
  FillChar(Buffer, Count, 0);
 
  // Правильный код для Юникода - любой из вариантов верный
  Count := SizeOf(Buffer);                // <<-- Задание размера буфера в байтах
  Count := Length(Buffer) * SizeOf(Char); // <<-- Задание размера буфера в байтах
  FillCha
r(Buffer, Count, 0);
end;

Здесь 3 статьи http://www.citforum.ru/programming/delphi/unicode/1.shtml


 
Кто б сомневался ©   (2009-12-10 15:29) [13]

А вообще вот это поюзайте:

http://lmgtfy.com/?q=%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4+%D0%BD%D0%B0+%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4+delphi


 
@!!ex ©   (2009-12-10 15:43) [14]

> [11] clickmaker ©   (10.12.09 15:11)
> Только нафуа тогда переходить на 2009?

1) Не поддерживаются другие версии уже. Да и купить сложно
2) Далеко не везде и не всегда нужен юникод.


 
Кто б сомневался ©   (2009-12-10 16:29) [15]


> 2) Далеко не везде и не всегда нужен юникод.


Эм. Все API работает на юникоде.
Лучше сказать "не везде и не всегда нужен ANSI". Так будет правильней.


 
Кто б сомневался ©   (2009-12-10 16:32) [16]

А вообще народ переходите на 2009, я сначала тоже парился, переходить с D7 на 2009,  а теперь обратно не перейду. Там помимо юникода столько фич удобных, - для написания кода итп, что обратно не затянешь.
Проблем при переводе проектов с D7 нет, только мелочи которые быстро фиксятся. Да и программы быстрее работают от 2009, чем на младших версиях.


 
clickmaker ©   (2009-12-10 16:33) [17]

> Эм. Все API работает на юникоде

кроме 9х и МЕ


 
Кто б сомневался ©   (2009-12-10 16:40) [18]


> кроме 9х и МЕ


ну дык их и юзают еденицы. Программы уже не делают под них. Делают от W2k.


 
Andjey   (2009-12-10 16:56) [19]


> Кто б сомневался ©   (10.12.09 16:32) [16]
> А вообще народ переходите на 2009,

Да и фейс у него покрасимше будет.... говорили..... Что-то по поиску не могу найти типа Delphi2009 в картинках. Посмотреть на него хоть со стороны. Раньше в журналах Компьютер Пресс вроде рекламировали новые среды.


 
Eraser ©   (2009-12-10 17:35) [20]

> [0] Andjey   (10.12.09 13:36)


> Подкиньте толковую статью про Юникод.

http://edn.embarcadero.com/article/38446
http://edn.embarcadero.com/article/38582
http://edn.embarcadero.com/article/38703


 
Andjey   (2009-12-10 17:57) [21]


> Eraser ©   (10.12.09 17:35) [20]

Спасибо. Я первую часть уже читал.  А вот на 2 и 3 ссылок не нашел. Сейчас все пучком. Будем почитать. :)


 
Кто б сомневался ©   (2009-12-10 19:05) [22]


> Andjey
> Спасибо. Я первую часть уже читал.  А вот на 2 и 3 ссылок
> не нашел.


Я ж тебе давал ссылку в [12]. Там и на 2 и на 3 есть.
В трех соснах заблудился да еще и в гугле искать не умеешь..


 
Anatoly Podgoretsky ©   (2009-12-10 20:24) [23]

> Andjey  (10.12.2009 16:56:19)  [19]

Ну посмотри на Visual Studio


 
Andjey   (2009-12-10 20:36) [24]


> Кто б сомневался ©   (10.12.09 19:05) [22]
> Я ж тебе давал ссылку в [12]. Там и на 2 и на 3 есть.
> В трех соснах заблудился да еще и в гугле искать не умеешь.

Конечно же, спасибо. Я их видел, просто я не сразу среагировал. Было много открыто закладок в Опере после гугла. Кстати, ссылку анимированую прикольную ты выложил. :) . Я вкурсе что гугл сейчас так может делать.


 
turbouser ©   (2009-12-10 21:07) [25]

string на ansi заменять тоже надо с головой.. как и char на ansichar.. да и много тонкостей всяких может появиться.
вот как-то переводил я fr2.5 под D2010.. мда.. недели две точно ушло..



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.006 c
15-1260396353
Petr V. Abramov
2009-12-10 01:05
2010.02.21
есть ли паровоз?


2-1261136409
Who_is_you?
2009-12-18 14:40
2010.02.21
Выход по времени ожидания


2-1261482684
rusned_7_
2009-12-22 14:51
2010.02.21
Проблема с Frame


2-1258016335
Tornado
2009-11-12 11:58
2010.02.21
Не могу сменить значек приложения


3-1234876925
Дукам
2009-02-17 16:22
2010.02.21
Просмотр объектов, привязанных к таблице





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский