Форум: "KOL";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизКак отличать друг от друга компоненты Найти похожие ветки
← →
Psychedelic © (2007-01-14 14:45) [0]Всем привет. Хочу написать мультиязыковой компонент.
Но столкнулся с некоторыми трудностями.
т.к. в кол нету классов, то как отличать друг от друга компоненты непонятно.
У одного есть свойство caption, у другого он называеться text или
используеться Tstrings.
Если работая с vcl я бы узнавал все через RTTI, то с KOL так не получиться.
Пока есть две идеи - это различать по тегам, но это отметается сразу т.к.
теги я использую частенько.
И второе - использовать первые две - три буквы имени компонента, которые будут
обозначать тип.
В принципе это устраивает, т.к. неписаное правило у програмисстов
по первым буквам обозначать его класс называя компонент.
CheckBox - chbName.
Смотрел имеющийся компонент на сайте, но он не в какие ворота не влазит.
Вобщем не понравился вообще.
Может у кого то будут другие идеи?
← →
SergeR © (2007-01-14 17:21) [1]Тэги - не вариант 100%.
> использовать первые две - три буквы имени компонента, которые
> будут обозначать тип.
Недостатки:
1.Придеться использовать директиву "USE_NAMES" >> увеличение приложения на ??Кб
2. Обязательная "стандартизация" проекта.
Можно как в UMLI: Своя AddXXX для каждого типа контрола,
Недостатки:
1.В каждом проекте придеться это делать ручками, а я так понимаю, что Вы хотите от этого отказаться.
← →
Psychedelic © (2007-01-14 17:32) [2]
> Придеться использовать директиву "USE_NAMES" >> увеличение
> приложения на ??Кб
Там считанные килобайты. У меня проект - 210 килобайт. С именами 212. Так что это ерунда.
← →
Psychedelic © (2007-01-14 18:22) [3]Я тут подумал :) . С Pcontrol "ом получаеться даже проще чем с vcl классами. Причем без предложенного способа - классификация по именам.
Так-с начнем-с пожалуй.
← →
Dimaxx © (2007-01-15 20:22) [4]Можно проще. На каждой форме ты сам знаешь - какой контрол имеет текст, нуждающийся в динамической загрузке. Напиши в его свойстве Caption некое название, которое будет соответствовать нужной строковой константе в файле локализации. Например, есть у тебя чекбокс. Допустим, он нужен для того, чтобы разрешать или запрещать программе делать какую-либо операцию. Напиши на стадии проектирования в Caption, допустим, CHECK_ENABLE_LOCK. Далее в файле локализации напиши примерно так:
CHECK_ENABLE_LOCK=Разрешить блокировать файл
Далее через Form.Children[] перебираем все контролы и смотрим их св-во Caption. Если оно непустое - читаем из файла локализации строку с именем из Caption. Если вернулась непустая строка - присваиваем ее св-ву Caption. Если пустая - не делаем ничего. И все. И не надо никаких имен, никаких тэгов и т.п. усложнений...
← →
ANTPro © (2007-01-15 21:16) [5]> [4] Dimaxx © (15.01.07 20:22)
Минус:
Прога не работает без файла локализации.
← →
Psychedelic © (2007-01-15 21:26) [6]Ну эт как раз и есть усложнение. А как с Tstrings тогда?
Да и у большинства придетсья переделывать проект полностью..
У меня куда компонентов, неохота, да и времени нету..
Я уже решил , все ок.
Я решил по windows class name отделять.
Имя компонента будет в любом случае (с именем на 2 -3 кило растет прога, но зато так практичней). ТО что я до этого предлагал, - отбросил (класс по имени).
Да, только стандартные будут, ну а для нестандартных тоже есть решение, ввиде расширениий.
← →
[e]Bu$ter © (2007-01-16 11:59) [7]Ждёмс с нетерпением!
← →
dimaxx © (2007-01-16 15:44) [8]
> Прога не работает без файла локализации.
Сделай дефолтный файл, который читается из ресурса приложения. В VCL все гораздо проще. В КОЛ сложнее, потому как приходится идти к цели обходными путями. К тому же что проще: отредактировать ресурсы проги спецсофтом или написать свой файл локализации в Блокноте?? Если ты делаешь мультиязыковое приложение - выбирай наиболее простой метод. Согласен, проще сразу писать мультиязыковое приложение, чем переделывать имеющееся. Я, например, никогда не полезу локализовать приложение, у которого все строки для локализации в ресурсах. Ф топку такую локализцию. А вот когда лежит отдельный файл - сам Бог велел.
Предлагаю объединить усилия и сделать КОЛ мультиязыковым. Не городить свои способы извращений, а сделать унифицированно. То есть внести определенные свойства для простоты локализации Ваших приложений. Включать все это по символу условной компиляции.
← →
Dimaxx © (2007-01-16 15:54) [9]Хотя вряд ли удастся - основной модуль КОЛ"а разросся уже не на шутку - уже целые оъекты выталкиваются в КОЛадд. Скоро и он разбухнет... И будет КОЛадд2, 3, 4 и т.д.
← →
Psychedelic © (2007-01-16 17:49) [10]
> Сделай дефолтный файл, который читается из ресурса приложения.
Да я так и делаю, - 2 варианта - из текст . файла и из ресурсов. Из ресурсов лучше к примеру для меня, т.к. проги я поджимаю упаковщиком, а текст пакуется на ура.
← →
ANTPro © (2007-01-16 19:44) [11]> [10] Psychedelic © (16.01.07 17:49)
> проги я поджимаю упаковщиком
Зря
← →
ANTPro © (2007-01-16 19:48) [12]> [9] Dimaxx © (16.01.07 15:54)
Надеюсь когда-нибудь для каждого крупного объекта будет свой *.pas файл, тем более что это не влияет на размер проги (правда надо будет кое-что предпринять ;)
← →
Dimaxx © (2007-01-16 20:31) [13]
> Зря
+1. Дайте почитать человеку статью Рассела про упаковщики... К сожалению утерял ссылку.
← →
Psychedelic © (2007-01-16 21:59) [14]
> [10] Psychedelic © (16.01.07 17:49)
> проги я поджимаю упаковщиком
Зря
> Дайте почитать человеку статью Рассела про упаковщики...
> К сожалению утерял ссылку.
>
Ну это не вам судить зря или не зря. Все минусы я знаю, со статьей знаком - сам хотел написать подобное, времени нехватило - забросил затею. Статья эта лежит на wasm.ru, кстати сайт многим понравиться/нравиться.
Вы же смотрите на плюсы также. Все зависит от задачи, я же не пишу "фотошопы". Ну и наконец есть секционные упаковщики.
← →
AndreyRus (2007-01-16 22:51) [15]Жать, надо но с умом!
← →
thaddy (2007-01-17 02:09) [16]Vladimir, I have this idea for some time,
It may be a good idea to implement a java style "equals" function in Tobj.
In java it is almost always implemented as a simple hash function.
Alexandr Shaharov made this for me two years ago:
function ElfHash_Sha(const s: string): integer;
asm
mov edx, eax
xor eax, eax
test edx, edx
jz @Ret
sub eax, [edx-4]
jz @Ret
mov ecx, eax
sub edx, eax
xor eax, eax
push ebx
@Loop:
movzx ebx, [edx+ecx]
add ebx, eax
lea eax, [ebx+ebx]
shr ebx, 20
lea eax, [8*eax]
and ebx, $0F00
xor eax, ebx
add ecx, 1
jnz @Loop
shr eax, 4
pop ebx
@Ret:
end;
It can easily be incorporated in Tobj and doesn"t add too much code. It is also a lot more efficient than using USE_NAMES. But I wonder if it would work for Tcontrol type instances. Still, it would work for all other poor objects.
← →
thaddy (2007-01-17 02:12) [17]It needs some adaptation: size of Tobj instance instead of string, Self, etc, ofcourse.
← →
homm © (2007-01-17 09:17) [18]> Надеюсь когда-нибудь для каждого крупного объекта будет
> свой *.pas файл, тем более что это не влияет на размер проги
> (правда надо будет кое-что предпринять ;)
Влитяет. Как минимум увеличивает на название самого модуля, которое хранится в рессурсах.
← →
Dimaxx © (2007-01-17 10:43) [19]На больших проектах влияние кучи модулей в отличие от одного большого модуля заметно. Код увеличивается хоть и незначительно в случае с множеством модулей (не только на имя модуля). Единый модуль предпочтительнее.
← →
Psychedelic © (2007-01-17 11:37) [20]
> Надеюсь когда-нибудь для каждого крупного объекта будет
> свой *.pas файл, тем более что это не влияет на размер проги
>
Между прочим KOL пишется в одном модуле, как раз по этой причине (основная).
← →
ANTPro © (2007-01-17 14:12) [21]> [18] homm © (17.01.07 09:17)
> Влитяет. Как минимум увеличивает на название самого модуля,
> которое хранится в рессурсах.
Нет. Размер не увеличится и в ресурсах лишних модулей не будет...
← →
ANTPro © (2007-01-17 14:14) [22]> [20] Psychedelic © (17.01.07 11:37)
Так и будет, он будет подключать остальные объекты. В юзесах будет прописан только KOL.pas
← →
homm © (2007-01-17 14:45) [23]> Нет. Размер не увеличится и в ресурсах лишних модулей не
> будет...
Сколько раз встречал перечисление всех используемых модулей в экзешниках VCL проектов. Не верю что КОЛ как-то может это изменить.
← →
homm © (2007-01-17 14:47) [24]Даже в колбук вроде об этом было. Ну в сатье Кладова "Компактные приложения" (кажется так) точно было.
← →
ANTPro © (2007-01-17 14:56) [25]> [23] homm © (17.01.07 14:45)
> Не верю что КОЛ как-то может это изменить.
Я могу : )
← →
Psychedelic © (2007-01-17 15:29) [26]
Размер не увеличится и в ресурсах лишних модулей не будет...
Берем да открываем resHackerom, и что видим?
все модули что использовали перечислены в секции packageinfo.
Так что если ее не удалить то все будет.
Обычно я удаляю ее (и не только) приготовленным макросом.Я могу : )
Как?
← →
ANTPro © (2007-01-17 21:18) [27]> [26] Psychedelic © (17.01.07 15:29)
> Берем да открываем resHackerom, и что видим?
> все модули что использовали перечислены в секции packageinfo.
И еще 64 байта (для каждого модуля) в EXE закидывает компилятор
> [26] Psychedelic © (17.01.07 15:29)
> Обычно я удаляю ее (и не только) приготовленным макросом.
Поделишься? : )
> [26] Psychedelic © (17.01.07 15:29)
> Как?
Смысл на этом экономить?
← →
Vladimir Kladov (2007-01-17 22:56) [28]initialization / finalization не будет работать. На ваше усмотрение.
← →
ANTPro © (2007-01-18 00:31) [29]> [28] Vladimir Kladov (17.01.07 22:56)
Еще как будет работать
← →
Psychedelic © (2007-01-18 17:46) [30]
> > Обычно я удаляю ее (и не только) приготовленным макросом.
>
>
> Поделишься? : )
Скачайте хелп по reshackeru там расписано как делать скрипты для него соответственно. В целом я удаляю DVCLAL и packageinfo - минус пол кило -килобайт.
> > Как?
>
> Смысл на этом экономить?
Уважаемый по моему вы не внимательно читали. Я спрашиваю о самом методе, а не о результате. Интересно просто, никто не знает, а вы знаете, так может поделитесь? (>>Нет. Размер не увеличится и в ресурсах лишних модулей не будет...).
← →
Psychedelic © (2007-01-18 17:49) [31]Дык это, Владимир, что на счет поста про хэш функцию [16]?
← →
Psychedelic © (2007-01-18 18:03) [32]
> initialization / finalization не будет работать. На ваше
> усмотрение.
Что то я недопонял.
Если убрать модули с ресурсов то не будет работать initialization / finalization?
Дык работает. Проверял.
← →
ANTPro © (2007-01-18 21:00) [33]Вот примерчик
Если определен ALLINONE, то все модули будут инклудится, если не определен - юзаться. (Я вделывал в WINDOWS.PAS еще два модуля MESSAGES.PAS и TYPES.PAS)
Есть много граблей при таких извращенниях.
(Думаю основной смысл будет понятен, поясню если что)
WINDOWS.PAS:
unit Windows;
....
interface
{$IFDEF ALLINONE}
{$IFDEF LINUX}uses Libc;{$ENDIF}
{$ELSE ALLINONE}
uses Types {$IFDEF LINUX}, Libc {$ENDIF};
{$ENDIF ALLINONE}
{$IFDEF ALLINONE}
{$DEFINE ALLINONE1}
{$I Types}
{$ENDIF ALLINONE}
.....
{$IFDEF ALLINONE}{$I Messages}{$ENDIF ALLINONE}
implementation
{$IFDEF ALLINONE}
{$UNDEF ALLINONE1}
{$DEFINE ALLINONE2}
{$I Types}
{$ENDIF ALLINONE}
.....
end.
TYPES.PAS:
{$IFNDEF ALLINONE}
unit Types;
interface
{$DEFINE ALLINONE1}
{$DEFINE ALLINONE2}
{$ENDIF ALLINONE}
{$IFDEF ALLINONE1}
// инклуд секции interface ...
{$ENDIF ALLINONE1}
{$IFNDEF ALLINONE}
implementation
{$ENDIF ALLINONE}
{$IFDEF ALLINONE1}
// инклуд секции implementation ...
{$ENDIF ALLINONE2}
{$IFNDEF ALLINONE}
{$UNDEF ALLINONE1}
{$UNDEF ALLINONE2}
end.
{$ENDIF ALLINONE}
← →
Vladimir Kladov (2007-01-18 21:41) [34]Насчет хэш-функции я вообще не понял, куда это. К strlist"у? А что хэшить-то (и зачем)?
Вариант с ALLINONE не нужен. Я уже точно знаю большую часть траблов от такого юзанья. Пропадает быстрая навигация в Delphi, ломается AutoCompletion, найти нужное слово поиском становится большой проблемой... Не было бы в Delphi ограничения на 65536 строк в модуле, я бы оставил KOL.pas в 1 модуле, и все дела.
← →
ANTPro © (2007-01-18 22:50) [35]> [34] Vladimir Kladov (18.01.07 21:41)
> Пропадает быстрая навигация в Delphi, ломается AutoCompletion,
> найти нужное слово поиском становится большой проблемой...
В топку редактор делфевый. Эх... если бы KOL к VS2005 прикрутить %)
← →
Psychedelic © (2007-01-18 23:05) [36]
> то все модули будут инклудится
Да не, лучше уж удалятьуже в скомпилированном exe... :)
Там всего то один щелчок...
Ну а как трассировать то их??..Замучиться можно..
Но вариант все таки..
← →
ANTPro © (2007-01-18 23:31) [37]> [36] Psychedelic © (18.01.07 23:05)
> Ну а как трассировать то их??..Замучиться можно..
Перед Release компиляцией определять ALLINONE, а в DEBUG пользовать как обычно
← →
Vladimir Kladov (2007-01-19 14:29) [38]опять непонятки. Проблемы начинаются, не когда опция (символ) компиляции добаляется, а раньше, когда вы этаких IFDEF"ов натыкаете.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.05 c