motofan logo
2 страниц V  1 2 >        
> 

Просьба Всем Дельфистам Зайти Сюда, По поводу кодировок

blackbox
сообщение 13.2.2006, 14:17 Закрепленное сообщение!


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Программы наших многоуважаемых разработчиков на Дельфи при определенном сочетании системного языка и региональных настроек работают некорректно, а именно отображают знаки вопроса вместо русских букв.
Проявляется это в следующем случае:
  1. установлена нелокализованная (английская) Windows;
  2. настройки языка и стандартов установлены НЕ русские;
  3. язык для не Unicode-программ установлен русский
Именно такая конфигурация имеется на моем компьютере, и большинство программ, в т.ч. и написанных на Дельфи и работающих с русским языком, работают корректно.

Обычно в таких случаях рекомендуют в реестре вручную присвоить кодовой странице 1252 значение 1251. Это помогает, но побочный эффект этого способа в том, что там, где должны были быть "кракозяблы" типа àãçêñ, отображаются русские символы.

Также замечено, что если значение для настроек языка и стандартов поставить "Россия", проблема исчезает, но меня такое решение не устраивает, т.к. даты начинают отображаться на русском.

После долгих ковыряний я пришел к выводу, что причиной проблемы, скорее всего, является баг в Дельфи при преобразовании строк в кодировках UTF-8 и UTF-16. Почему-то при переводе этих строк в ANSI используется не системная кодовая страница (язык для не Unicode-программ), а настройка языка и стандартов.
Во всех программах, в которых наблюдается баг, строки в формах хранятся в UTF-8 и UTF-16. В тех программах, где используется win1251, бага нет.


n0wheremany нашел способ решения проблемы, за что ему большое спасибо!

В код программы необходимо добавить следующее:

Код

program Project1;

uses
 Windows,
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 SetThreadLocale(1049); // <<<<<<<<<
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Нижеприведенный патч остается здесь как альтернативное средство, на случай если разработчики по тем или иным причинам не исправят свои программы.
Прикрепленный файл LangPatch.zip   ( 2.28 килобайт ) Кол-во скачиваний: 297


Чтобы избавиться от этого глюка, я написал маленький патч, конвертирующий строки в формах в кодировку win1251. Имейте ввиду, что я в глаза не видел среду разработки Delphi и понятия не имею, могут ли быть побочные эффекты у моей программы. Может этот патч пригодится кому-то еще.

Внимание: патч не умеет работать с упакованными exe файлами (например, UPX, Aspack, PECompact и т.п.), для использования патча предварительно распакуйте программу (в случае UPX это можно сделать самим упаковщиком командой upx -d program.exe, другие распаковщики можно найти в интернете по запросу "exe unpackers").


Несмотря на этот патч, все-таки хотелось бы, чтобы разработчики внесли изменения в свои программы самостоятельно.


Ниже идет список программ с глюком и без (имеются ввиду только программы на Delphi с русским интерфейсом).

Программы с глюком
P2KTools.....................0.8.6.406....Bezols
Theme Creator................2.2.3.4......Bezols
MotoSMSManager...............3.3..........Udman
MotoFlashExplorer............1.2..........Udman
RecoverSMS...................???..........Udman
MotoPatchMaker...............4.1..........Udman
PBMoto.......................1.3.101......Deamon
PBTools......................???..........Vovan_mail
TFlash info..................0.2..........Dimafeng
P2KSweeper...................0.0.3........Dimafeng
MotoFan's Wallpaper Creator..1.5..........Splash.666
Motorola Wallpaperz Creator..2.2..........Splash.666
OpCode Maker.................3.0.0.0......KEO
P2KStyle.....................0.6.0.0......KEO
P2K Voice Button.............0.2..........G.off
P2kCleaner...................2.6.1........ZeatooL
P2kPat.......................1.0..........ZeatooL
Motorola Explorer............0.94 Beta....Random
IMY-Editor...................1.0.0.0.1....Serg c650
P2k-MultiFoto................1.0.0.0.3....Serg c650
iTap Dictionary Editor.......1.14.........kENOD
MotoLoader...................1.0.0.4......Ant-ON
P2KFotoFan...................1.0.0.3......Ant-ON
P2kEMSView...................4.3..........Dimka


Программы без глюка
FullJava.....................1.5..........Eugene
P2KText......................2.0.1........Agent 707
Firm_name....................0.0.0.1......vassio
Syssound.....................4.0.2........vassio
MotoKlava....................2.3..........KosteT
UniMoto......................2.1.0.101....n0wheremany
GP Tables Editor Standard....1.0..........Synergy
MotoKeyboard.................1.0.0.5......Serg c650
P2k-Action...................1.0.0.8......Serg c650
PhoneFotoGallery (OBEX)......2.0.0.0......KEO




Списки будут пополняться. Следите за обновлениями.

Сообщение отредактировал blackbox - 27.7.2006, 22:16
Прикрепленный файл LangPatch.zip   ( 2.28 килобайт ) Кол-во скачиваний: 297
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Udman
сообщение 13.2.2006, 15:01


Мастер
****

Группа: Пользователи
Сообщений: 200
Регистрация: 26.9.2005
Из: Черкассы, Украина
Пользователь №: 52 766
Модель телефона: ROKR E1
Прошивка: R373_G_0E.30.46R

Рейтинг: 43



А что именно в файле ты меняешь чтобы все было ок?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 13.2.2006, 16:56


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Цитата
MotoPhoneTools...............n0wheremany

Я исправил ;) . Но теперь это не важно она закрыта!


Да можно запросто сделать:

1. Окрыть Exe файл в реадкторе ресурсов (Или при создании программы выбрать все компоненты, визуальные конечно с font.Charset)
2. Заменить все "DEFAULT_CHARSET" на "RUSSIAN_CHARSET"

Усё.

Давайте делать программы, которые не нужно былобы переделывать пользователями :)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 13.2.2006, 17:22


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Цитата(Udman @ Понедельник, 13 Февраля 2006, 17:01)
А что именно в файле ты меняешь чтобы все было ок?
*


Меняю RUSSIAN_CHARSET на DEFAULT_CHARSET и конвертирую внутреннюю кодировку строк в форме (всех Caption, Hint, Message) из UTF-8/UTF-16 в ANSI.

Цитата(n0wheremany @ Понедельник, 13 Февраля 2006, 18:56)
Да можно запросто сделать:

1. Окрыть Exe файл в реадкторе ресурсов (Или при создании программы выбрать все компоненты, визуальные конечно с font.Charset)
2. Заменить все "DEFAULT_CHARSET" на "RUSSIAN_CHARSET"

Я пробовал, этого недостаточно. Нужно еще изменить кодировку. Например, в хексредакторе, но это долго, поэтому я и написал такую программу.

Цитата(n0wheremany @ Понедельник, 13 Февраля 2006, 18:56)
Давайте делать программы, которые не нужно былобы переделывать пользователями :)
*


Согласен, но пока приходится переделывать.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
KEO
сообщение 13.2.2006, 19:08


Мастер
****

Группа: Разработчики
Сообщений: 258
Регистрация: 18.9.2003
Из: Барнаул
Пользователь №: 580
Модель телефона: E398 >> E1 iTunes
Прошивка: R373_G_0E.30.42R

Рейтинг: 151



интересно... 2 моих проги работают нормально, а 2 нет... хотя все писались одинаково, и я, к сожалению, никогда не следил за тем какой кодировкой они написаны... все вроде-бы писалось на одном компе, в одной среде и прочих равных условиях...

Спасибо большое за замечание - постараюсь в дальнейшем жестко контролировать совместимость моих программ с кодировкой 1252.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
KEO
сообщение 13.2.2006, 19:08


Мастер
****

Группа: Разработчики
Сообщений: 258
Регистрация: 18.9.2003
Из: Барнаул
Пользователь №: 580
Модель телефона: E398 >> E1 iTunes
Прошивка: R373_G_0E.30.42R

Рейтинг: 151



Кстати, P2KText не моя программа, а Agent 707... просьба исправить
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 13.2.2006, 19:52


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



KEO,
Только что проверил - в P2KStyle тоже есть глюк, но он виден только в заголовках групбоксов в форме настроек.
Прикрепленное изображение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
vassio
сообщение 13.2.2006, 20:27


Patcher
****

Группа: Пользователи
Сообщений: 168
Регистрация: 16.1.2006
Из: Одесса
Пользователь №: 65 813
Модель телефона: e398, c380
Прошивка: r45

Рейтинг: 194



blackbox, проверь Syssound
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 13.2.2006, 21:28


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



vassio,
Все в норме. Кстати, какая у тебя версия Delphi?

[OFF]Привет Одессе![/OFF] clap;applo


Если кому интересно, вот как хранятся строки в формах:

Код
(1) UTF-16:
               /----------------------- 0A * 2 --------------------------\
12 0A 00 00 00 21 04 3F 04 40 04 30 04 32 04 3E 04 47 04 3D 04 38 04 3A 04

(2) ANSI:
      /------------ 0A -----------\
06 0A D1 EF F0 E0 E2 EE F7 ED E8 EA
      С  п  р  а  в  о  ч  н  и  к

(3) UTF-8:
               /---------------------- 1B ----------------------------------------------------\
14 1B 00 00 00 D0 9E D1 81 D0 BD D0 BE D0 B2 D0 BD D0 BE D0 B9 20 D0 BD D0 BE D0 BC D0 B5 D1 80

(4) ANSI:
      /------------------ 0E -----------------\
06 0E CE F1 ED EE E2 ED EE E9 20 ED EE EC E5 F0
      О  с  н  о  в  н  о  й     н  о  м  е  р


Мой патч конвертирует (1) в (2) и (3) в (4).

Сообщение отредактировал blackbox - 14.2.2006, 0:32
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 14.2.2006, 6:44


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Цитата
Я пробовал, этого недостаточно. Нужно еще изменить кодировку. Например, в хексредакторе, но это долго, поэтому я и написал такую программу.


Ну это само сабой. Просто при создании программы не надо такого вытворять.

Люди если вы пишите на Делфях, то создайте проект по умолчанию и введите тама свои значения. Намного облегчит жизнь пользователям.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
0vZ
сообщение 14.2.2006, 15:55


Мото-юрист
*****

Группа: Почётные мотофаны
Сообщений: 371
Регистрация: 15.2.2004
Из: Ростов-на-Дону
Пользователь №: 1 173
Модель телефона: X100/C350/SP3i
Прошивка: G1/74R/WinMobile2005

Рейтинг: 278



У меня в motoTunes по просьбе иностранцев (в частности, китайцев) используется DEFAULT_CHARSET. Если кому надо, берете LNG файл и дописываете для формы и некоторых компонентов (у некоторых компонентов ParentFont=false):
Код
<font Charset="RUSSIAN_CHARSET"/>
(вроде бы так, точно не помню).
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 14.2.2006, 20:33


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



0vZ, с твоей прогой все в порядке, она не попала в список потому что в самих формах у тебя все на английском. Как показывает практика, когда текст подгружается из lng файла, проблемы не возникает.
Глюки бывают только в том случае, когда русский текст статически хранится в форме в одной из unicode кодировок.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Dosian
сообщение 5.4.2006, 1:11


Интересующийся
**

Группа: Пользователи
Сообщений: 84
Регистрация: 20.9.2005
Пользователь №: 52 133
Модель телефона: E398
Прошивка: 6fr

Рейтинг: 39.5



blackbox Проверь мою, пожалуйста (iMoto MICRO)... :) Хотя это и не совсем Delphi (Free Pascal + object Pascal + ASM), но всё же...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 5.4.2006, 1:21


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Dosian,
Все нормально, т.к. у тебя не используются формы Dephi.
Раз уж зашла речь о твоей проге, исправь такой глюк: при запуске вылезают сообщения "There is no disk in the drive. Please insert a disk into drive".
У меня кардридер 4-в-1, который отображается как 4 диска (E,F,G,H). Телефон обычно висит на диске I или J.
Приходится нажимать 4 раза Cancel.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
aligatro
сообщение 5.4.2006, 3:41


Мотоблуджекер
******

Группа: Пользователи
Сообщений: 849
Регистрация: 14.4.2005
Пользователь №: 40 684
Модель телефона: Нокиа

Рейтинг: 155



blackbox,
Этот глюк лечится если поменять стандарты на русские.
Добавь в список Motorola Explorer v0.92 by Random :) глюков нету после того как Random сделал отдельный файл для языка.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Dosian
сообщение 6.4.2006, 8:42


Интересующийся
**

Группа: Пользователи
Сообщений: 84
Регистрация: 20.9.2005
Пользователь №: 52 133
Модель телефона: E398
Прошивка: 6fr

Рейтинг: 39.5



Цитата(blackbox @ Среда, 5 Апреля 2006, 4:21)
Dosian,
Все нормально, т.к. у тебя не используются формы Dephi.
Раз уж зашла речь о твоей проге, исправь такой глюк: при запуске вылезают сообщения "There is no disk in the drive. Please insert a disk into drive".
У меня кардридер 4-в-1, который отображается как 4 диска (E,F,G,H). Телефон обычно висит на диске I или J.
Приходится нажимать 4 раза Cancel.
*



Я знаю про этот "глюк", пострараюсь найти альтернативу... Исправлю.
Спасибо.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 6.4.2006, 11:56


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Цитата(aligatro @ Среда, 5 Апреля 2006, 5:41)
blackbox,
Этот глюк лечится если поменять стандарты на русские.
Добавь в список Motorola Explorer v0.92  by Random  :)  глюков нету после того как Random сделал отдельный файл для языка.
*


Разумеется, если поменять стандарты, глюк лечится. А я не хочу их менять, например меня не устраивает отображение названий дней недели и месяцев на русском.

Motorola Explorer 0.92 попал в список с глюком, потому что в файле с языками присутствуют не все строки из интерфейса, например, контекстное меню.

Добавлено:
А вот в Motorola Explorer 0.93 глюка нет.

Сообщение отредактировал blackbox - 6.4.2006, 18:52
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 8.4.2006, 19:25


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Значит так дельфисты... Все сюда.

Что нормально работала программа для blackbox...

Надо:

Код

program Project1;

uses
 Windows,
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 SetThreadLocale(1049); // <<<<<<<<<
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


У меня Chrset стоит на Russian_Charset. На Default_Charset не проверялось. Так что ставте Russian_Charset везде где есть свойство шрифт.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 15.4.2006, 13:48


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



:) begin
SetThreadLocale(1049);
Это должно прорулить, но только нужно это помещать в pas модуль например в FormCreate

У кого англицкая винда посмотрите это

:) Просмотрите
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 15.4.2006, 14:00


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Vovan_mail,
Сплошные знаки вопроса. И ты забыл в архив положить .bpl'ы.

P.S. И зачем ты пакуешь exe и dll UPX'ом так, что их невозможно распаковать?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 15.4.2006, 14:13


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



Цитата(blackbox @ Суббота, 15 Апреля 2006, 14:00)
P.S. И зачем ты пакуешь exe и dll UPX'ом так, что их невозможно распаковать?
*


чтобы размер уменьшить
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 15.4.2006, 14:26


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Цитата
чтобы размер уменьшить


В оригинале (в распакованном виде) это прокатит, а если создавать инсталл или rar паковать - ни плюсов ни минусов (^_^)

Цитата
Это должно прорулить, но только нужно это помещать в pas модуль например в FormCreate


Я чётко написал где и куда ставить. Никаких + или -.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 15.4.2006, 17:02


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



:) Архив положил с открытыми ресурсами.

//------------------------------------------------------------------------------
procedure PlayA(fdwSound: Cardinal); external 'Sound.dll'; procedure PlayB
(fdwSound: Cardinal); external 'Sound.dll'; procedure PlayC(fdwSound: Cardinal);
external 'Sound.dll'; procedure PlayF(fdwSound: Cardinal); external 'Sound.dll';
procedure PlayH(fdwSound:Cardinal);external'Sound.dll';procedure PlayI(fdwSound:
Cardinal); external'Sound.dll';procedure PlayX(fdwSound: Cardinal);
external 'Sound.dll'; procedure PlayW(fdwSound: Cardinal); external 'Sound.dll';
//------------------------------------------------------------------------------
Цитата(n0wheremany @ Суббота, 15 Апреля 2006, 14:26)
Я чётко написал где и куда ставить. Никаких + или -.
*



И попробовал сделать по твоему, может сейчас отобразится всё нормально
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 15.4.2006, 18:20


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Цитата(Vovan_mail @ Суббота, 15 Апреля 2006, 17:13)
чтобы размер уменьшить
*


Я знаю, для чего нужен UPX, просто та версия, которую ты выложил ранее, была упакована таким хитрым образом, что ее невозможно было распаковать.
Цитата(Vovan_mail @ Суббота, 15 Апреля 2006, 20:02)
И попробовал сделать по твоему, может сейчас отобразится всё нормально
*


Вот сейчас действительно нормально.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 15.4.2006, 19:57


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



Цитата(blackbox @ Суббота, 15 Апреля 2006, 18:20)
Я знаю, для чего нужен UPX, просто та версия, которую ты выложил ранее, была упакована таким хитрым образом, что ее невозможно было распаковать.
*



:) Это ещё не совсем хитрым образом. Upx нужен затем чтобы не изменяли ресурсы и многое другое....
Пример: Решил чел перевести на Англицкий прогу. А в проге например какая-то функция привязана к надписи на кнопке, кердык и прога не работает.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 15.4.2006, 20:10


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



Цитата
А в проге например какая-то функция привязана к надписи на кнопке, кердык и прога не работает.


Ну это ошибка програмиста. Такого ни вкоем случае делать нельзя - Зачем же Tag тогда нужен?

Цитата
Upx нужен затем чтобы не изменяли ресурсы и многое другое....


А вот это правильно!!!
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 15.4.2006, 20:17


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



Цитата(n0wheremany @ Суббота, 15 Апреля 2006, 20:10)
Такого ни вкоем случае делать нельзя - Зачем же Tag тогда нужен?
*



Согласен, но есть случаи когда это необходимо делать.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 15.4.2006, 20:18


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Цитата(Vovan_mail @ Суббота, 15 Апреля 2006, 22:57)
Пример: Решил чел перевести на Англицкий прогу.  А в проге например какая-то функция привязана к надписи на кнопке, кердык и прога не работает.
*


Проверка надписи на кнопке - это плохой стиль программирования. Если довести эту идею до абсурда, то программа может делать скриншоты своего окна и проверять состояние кнопок по цвету пикселей.
Все состояния в программе нужно хранить в переменных, а не в надписях на кнопках.

Впрочем, если ты хочешь таким образом препятствовать локализации своей программы (непонятно, кстати, почему), то дело твое.

Я вообще отрицательно отношусь к защите программ, тем более что невзламываемых защит не бывает, и не вижу ничего плохого в модификации ресурсов под свои нужды при условии сохранения копирайта.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 15.4.2006, 21:33


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



blackbox, может это правила плохого тона, но что сдесь плохого

procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption='Open' then begin
.......
.......
Button1.Caption:='Close'
end else begin
.......
........
Button1.Caption:='Open';
end;
end;
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 15.4.2006, 21:38


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Vovan_mail,
делай так:

begin
if status=close then begin
status:=open;
Button1.Caption:='Close';
.......
.......
end else begin
status:=close;
Button1.Caption:='Open';
.......
........
end;
end;
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vovan_mail
сообщение 16.4.2006, 6:50


Мастер
****

Группа: Пользователи
Сообщений: 166
Регистрация: 20.12.2004
Из: г. Смоленск
Пользователь №: 28 543
Модель телефона: Z3 - Z6
Прошивка: R452B_G_08.02.0DR

Рейтинг: 26



Если по щелчку на той самой кнопке надо поменять его кепшен и выполнить какое-то действие?
1.Можно поставить две кнопки -> Open Close прямо как в винде, чтобы не менять его кепшен
2. Увеличить код, используя переменные или Tag.
Тем самым следуя хорошему тону, или как учили. Хотя я не изучал програмирование, а доходил методом тыка -
следовать не рациональности просто глупо. Кто вообще установил эти правила тона. Вот пример моего кода, так у меня выглядит pas модуль
//-------------------------------------------------------------------------------------------------
procedure TMf.sRadioButton2Change(Sender:TObject);begin Zag.Enabled:=false;Delp.
Visible:=true;Addp.Visible:=false;View.Enabled:=true;Ras.Enabled:=false;ICapR.
Visible:=true;Name.Enabled:=false;Zag.Text:='';Ras.Text:='';Name.Text:='';end;
//-------------------------------------------------------------------------------------------------
procedure TMf.sRadioButton1Change(Sender: TObject);begin View.Enabled:=false;
Ras.Enabled:=true;Name.Enabled:=true; Ind:=-55;ICapR.Visible:=false;Zag.Enabled
:=true;Delp.Visible:=false;Addp.Visible:=true;end;
//-------------------------------------------------------------------------------------------------
procedure TMf.LbclMouseEnter(Sender: TObject);begin Iclr.Visible := true;
Icl.Visible:=false;end;
//-------------------------------------------------------------------------------------------------
procedure TMf.LbclMouseLeave(Sender: TObject);begin Iclr.Visible := false;
Icl.Visible:=true;end;
//------------------------------------------------------------------------------------------------
procedure TMf.LbclClick(Sender: TObject); begin Close;end;
//------------------------------------------------------------------------------------------------

мне удобно и привык уже читать в таком виде код, и места мало занимает, а компилятору побоку как
лежит код в модуле ,тока правильно было-бы. И второе видно процедура закрыта или нет, если не закрыта то она развёрнута. Хотя опять токи можно как учили.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 16.4.2006, 14:41


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Vovan_mail,
Использовать текст кнопки для управления логикой программы плохо. Нет смысла из-за этого экономить на переменных, тем более у тебя в программе почти мегабайт звуков, а пара переменных погоды не сделают.
И это не только мое мнение, поэтому я не хочу дальше спорить.
Мы слишком далеко ушли от темы.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
MegaBeaver
сообщение 7.6.2006, 12:40


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 26.5.2006
Пользователь №: 84 795
Модель телефона: SLVR L7
Прошивка: R4513_G_08.B7.DCR_RB

Рейтинг: 0



о великие гуру кодинга, прога из PBMoto13101.rar пишет везде ???? ?? ??? вместо кириллицы (никакой другой проги для работы с тел. книгой L7 я не нашел пока - p2k видит только 40 записей и НЕ ВСЕ поля :( )

После обработки её утилитой langpatch.zip, перестаёт запускаться с ошибкой - The application failed to initialize properly (0x00000005). Click OK to terminate the application.

Win XP Pro Eng SP2.

Подскажите, как/чем мне слить-залить тел. книгу со ВСЕМИ полями, или как победить эту PBMoto?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 7.6.2006, 13:35


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



MegaBeaver,
странно, что мой патч у тебя не заработал.
Вот лови уже пропатченный exe.
Прикрепленный файл PBMoto.zip   ( 286.25 килобайт ) Кол-во скачиваний: 65
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
MegaBeaver
сообщение 7.6.2006, 13:43


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 26.5.2006
Пользователь №: 84 795
Модель телефона: SLVR L7
Прошивка: R4513_G_08.B7.DCR_RB

Рейтинг: 0



Спасибо! Запустилось с кириллицей, супер.
Так твой патч делал EXE 4xx xxx байт, а этот и оригинал - 30х ххх байт... Та же тема с той же ошибкой на PBTools у меня.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 7.6.2006, 13:48


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



MegaBeaver,
ты наверное забыл распаковать UPX-ом перед пропатчиванием.
Надо было сделать так:
upx -d PBMoto.exe
UPX можно взять на http://upx.sf.net/

Мой патч не работает с упакованными exe.

Сообщение отредактировал blackbox - 7.6.2006, 13:56
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Daniel
сообщение 8.6.2006, 17:56


Ветеран
*****

Группа: Почётные мотофаны
Сообщений: 404
Регистрация: 15.2.2005
Пользователь №: 37 003
Модель телефона: C450
Прошивка: лежит бездыханно

Рейтинг: 66.5



А у меня проблемма следующего характера. На Label и Button всё нормально отображается, а вот в Edit не хочет. Тоесть отображается на русском, но если с поля копировать русский текст, то когда вставишь получаются кракозяблы.
Код
opendialog1.Execute;
edit1.Text:=opendialog1.FileName
Вот так текст попадает в Label

Помогите, пожалуйста.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
blackbox
сообщение 8.6.2006, 19:17


Control Freak
******

Группа: Разработчики
Сообщений: 838
Регистрация: 23.9.2005
Пользователь №: 52 431

Рейтинг: 627.5



Daniel,
Попробуй переключить раскладку клавиатуры на русскую перед копированием.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
n0wheremany
сообщение 9.6.2006, 7:13


Прогр@ммер
*****

Группа: Почётные мотофаны
Сообщений: 564
Регистрация: 10.9.2005
Пользователь №: 51 111
Модель телефона: E398

Рейтинг: 341



2Daniel

Попробуй мой код. Кот на 2 странице.

ЗЫ
Код

opendialog1.Execute; // - так нельзя
//Надо
if opendialog1.Execute then
...
begin
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
KEO
сообщение 5.7.2006, 5:43


Мастер
****

Группа: Разработчики
Сообщений: 258
Регистрация: 18.9.2003
Из: Барнаул
Пользователь №: 580
Модель телефона: E398 >> E1 iTunes
Прошивка: R373_G_0E.30.42R

Рейтинг: 151



Ув. blackbox,
вышла в свет новая версия программы PhoneFotoGallery [OBEX edition]. В ней я постарался избежать того досадного глюка с кодировкой.
Большая просьба протестировать программу на это, потому как у меня нет такой возможности... И если всё нормально, то исключить эту программу из списка программ с глюком.

Прямая ссылка для загрузки программы
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Просьба Всем Дельфистам Зайти Сюда, По поводу кодировок · Ломаем и строим! · Forum
 

2 страниц V  1 2 >
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.7.2025, 21:33

Форум живёт: