Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.045 c
2-1186260841
Wind
2007-08-05 00:54
2007.09.02
Как изменить цвет строки в DbGrig


15-1186308541
vrem
2007-08-05 14:09
2007.09.02
Стандартизация и программисты :)


15-1185970305
max999
2007-08-01 16:11
2007.09.02
как удалить файл?


2-1186485969
dhteghjg
2007-08-07 15:26
2007.09.02
в чем ошиба


2-1186558517
Евгений Р.
2007-08-08 11:35
2007.09.02
upper для русских букв FB 1.5.3





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский