Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Компоненты   Найти похожие ветки 

 
Gero ©   (2004-06-10 23:47) [0]

Компоненты, компоненты, компоненты...
Эти компонеты уже пишут по поводу и без повода, мол я написал компонент копирующий файлы, а я написал компонент для messagebox"ов...
Это уже начало раздражать.
Еще и спрашивают: мол, почему в твоей программе так много кода, лучше бы по компонентам все разбил.
Уше дошло до того, что пишут компоненты без свойств, содержащие одну-единственную функцию(не считая унаследованных, конечно).
Типа круто?


 
Гаврила ©   (2004-06-10 23:48) [1]

типа круто потом проект на другую машину переносить
и еще круто с сишниками холи-вар вести потом


 
ИМХО ©   (2004-06-10 23:54) [2]

"Компьютеры, процессоры, сканнеры... надоело! Сколько можно?" (с)


 
Игорь Шевченко ©   (2004-06-10 23:56) [3]

Компонент хорошо создавать, когда он используется более одного раза в программе, а еще лучше - в нескольких программах. Тогда в его написании есть смысл. Мначе - лично я не вижу смысла.


 
Gero ©   (2004-06-10 23:56) [4]


> ИМХО ©   (10.06.04 23:54)

И что Вы этим хотите сказать?


 
Gero ©   (2004-06-10 23:57) [5]


> Игорь Шевченко ©   (10.06.04 23:56)

А просто модуль чем хуже?


 
KilkennyCat ©   (2004-06-10 23:59) [6]


> Gero ©   (10.06.04 23:57) [5]


или процедура :)


 
jack128 ©   (2004-06-10 23:59) [7]


> Эти компонеты уже пишут по поводу и без повода, мол я написал
> компонент копирующий файлы, а я написал компонент для messagebox"ов...
Что реально так? Лично мне даже там где надо было бы компонентом оформить просто лениво этоо делать. У мя дома инсталировать, на работе инсталировать. А потом вдруг новое свойство решу добавить - опять по новой... Хотя возможно это потому, что я контролы не пишу. Для визуальных компонентов дезин тайм, конечно, огромную роль играет..


 
KilkennyCat ©   (2004-06-11 00:00) [8]


> jack128 ©   (10.06.04 23:59) [7]


а я проблему "дом-работа" решил винтом в мобилраке.


 
Игорь Шевченко ©   (2004-06-11 00:01) [9]

Gero ©   (10.06.04 23:57)


> А просто модуль чем хуже?


На форму не положишь, в design-time свойства не настроишь


 
Gero ©   (2004-06-11 00:02) [10]


> Что реально так?

Ну вот пример:
http://delphimaster.net/view/1-1086886557/
10 - ый пост.

Это только то, что под руку попалось, а вобще примеров таких немерянно встречал.


 
Игорь Шевченко ©   (2004-06-11 00:05) [11]

Gero ©   (11.06.04 00:02)


> Ну вот пример:
> http://delphimaster.net/view/1-1086886557/
> 10 - ый пост.


Ну, это типа того, что как бы круто компоненты писать


 
Gero ©   (2004-06-11 00:06) [12]


[9] Игорь Шевченко ©   (11.06.04 00:01)
> На форму не положишь, в design-time свойства не настроишь

Да, уважительные причины.


 
Игорь Шевченко ©   (2004-06-11 00:07) [13]

Gero ©   (11.06.04 00:06)


> Да, уважительные причины.


Это ирония ?


 
KilkennyCat ©   (2004-06-11 00:08) [14]


> Игорь Шевченко ©   (11.06.04 00:01) [9]
>
> На форму не положишь, в design-time свойства не настроишь


Вы будете смеятся, но когда я первый раз сел за делфи, окно свойств не открылось. И я писал программу, не зная о его существовании :) Книжки тогда не было, изучал методом тыка. Была написана сетевая версия программы "платежка"! за 700 рублей :) и месяц возни (большей частью в ВарКрафте)


 
Gero ©   (2004-06-11 00:08) [15]


> [13] Игорь Шевченко ©   (11.06.04 00:07)

Ну конечно :)
А что, Вы действительно считаете эти причины уважительными?


 
Gero ©   (2004-06-11 00:12) [16]


> KilkennyCat ©   (11.06.04 00:08)
> когда я первый раз сел за делфи, окно свойств не открылось.
> И я писал программу, не зная о его существовании :)

LOL :)
Так держать!
Скажем "нет" устанавливанию свойств в DesignTime!
:)


 
Игорь Шевченко ©   (2004-06-11 00:18) [17]

Gero ©   (11.06.04 00:08)


> А что, Вы действительно считаете эти причины уважительными?


Конечно. А что, можно иначе считать ? Поделитесь, мне тоже стало интересно.

Кстати, небольшой пример: есть программа для ввода неких данных, данные вводятся через набор Edit"ов, ComboBox"ов и прочих контролов. Есть задача - при вводе пользователем некорретных значений выделять фон контрола "цветом неверности" (разумеется - желтым:)
(Неверность значений определяется у каждого контрола по своим правилам, иногда в чем-то совпадающим, иногда различающимся)

Как эту задачу можно решить наименьшим количеством кода без компонентов ?


 
jack128 ©   (2004-06-11 00:18) [18]


> А что, Вы действительно считаете эти причины уважительными?

сморя какой компонент. Чем сложнее, тем более уважительной является эта причина. Подумай сколько бы ты настраивал, ну например, связку DataSet - DataSource - DbGrid, что бы она нормально отображалась. Настроить все заголовки, все форматы, прописать lookup поля и тд и тп. Все таки Delphi - это среда _визуального_ программирования..


 
Gero ©   (2004-06-11 00:27) [19]


> Игорь Шевченко ©   (11.06.04 00:18)

Ну, например так(первое что в голову пришло):

if Comp is TEdit then
 begin
   if Tedit(Comp).Text <> "верный текст" then
     TEdit(Comp).Color := clErrorColor
   else
     TEdit(Comp).Color := clNormalColor;
 end
else if Comp is TComboBox then
 begin
   // Аналогично
 end
else if ...

А как бы эту задачу решали Вы?


 
Gero ©   (2004-06-11 00:28) [20]


> jack128 ©   (11.06.04 00:18)

Это понятно, но нужно же знать меру.
Компонент для копирования файлов - это уже до ручки дело дошло.


 
Игорь Шевченко ©   (2004-06-11 00:33) [21]

Gero ©   (11.06.04 00:27)

У разных TEdit разные правила для определения верности, мне показалось, я это объяснил. Контролов в общей сложности (на паре десятков форм) около сотни, разных правил проверки примерно три десятка.


 
Gero ©   (2004-06-11 00:36) [22]


> Игорь Шевченко ©   (11.06.04 00:33)

Прошу прощения, я пропустил этот момент.

Так как бы это сделали Вы?
В чем преимущество создания компонента в данном случае?


 
Игорь Шевченко ©   (2004-06-11 00:37) [23]

Забыл добавить - в совокупности используется 6 разных типов контролов. (TDBEdit, TDBComboBox, TDBComboEdit, TDBCalcEdit, TDBDateEdit, TComboBox)


 
Gero ©   (2004-06-11 00:44) [24]


> [23] Игорь Шевченко ©   (11.06.04 00:37)

Так в чем преимущество создания компонента в данном случае?
Просветите меня, темного.


 
Игорь Шевченко ©   (2004-06-11 00:46) [25]

Gero ©   (11.06.04 00:44)

Я бы хотел сначала увидеть способ решения без компонентов, если не трудно :)


 
nikkie ©   (2004-06-11 00:50) [26]

>Я бы хотел сначала увидеть способ решения без компонентов, если не трудно :)
пишется процедура SetErrorStyle(AControl: TControl; Value: Boolean) - внутри проверка по классу и для каждого класса по-своему выставляем св-ва.


 
Gero ©   (2004-06-11 00:51) [27]


> [25] Игорь Шевченко ©   (11.06.04 00:46)

Чесно говоря, я очень устал и меня сейчас ломает что-либо писать.
Но если так настаиваете, то написать могу.
Но зачем?
Вы сомневаетесь, что я с этим справлюсь? ;)


 
Gero ©   (2004-06-11 00:53) [28]


> внутри проверка по классу и для каждого класса по-своему
> выставляем св-ва.

Я в [19] это и имел ввиду.
Только не по классу проверка, а для каждого контрола своя проверка, я так понял.


 
GuAV ©   (2004-06-11 00:59) [29]


> Вы сомневаетесь, что я с этим справлюсь? ;)

Gero! На тебя с надеждой смотрят все противники визуальной разработки! Не подведи их!


 
Gero ©   (2004-06-11 01:01) [30]


> Не подведи их!

Наверное, все же подведу. Отдыхать-то тоже хочется.


 
Игорь Шевченко ©   (2004-06-11 01:08) [31]

nikkie ©   (11.06.04 00:50)

У одного класса компонентов могут существовать (и существуют) разные правила проверки.

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

При попытке подтверждения ввода данных в случае неверного значение в контроле должно выдаваться предупреждающее сообщение (для каждого правила проверки - свое) :)


 
Profi ©   (2004-06-11 01:08) [32]

>Gero

LMD

Модуль лучше и проще, но... надо запомнить все названия функций, либо делать справочник (хотя бы txt). В компоненте же, delphi сам предлежет все функции! Так что выбор за тем, что удобнее.


 
Gero ©   (2004-06-11 01:12) [33]

Удалено модератором


 
Profi ©   (2004-06-11 01:16) [34]

Удалено модератором


 
nikkie ©   (2004-06-11 01:16) [35]

[31] Игорь Шевченко
ок, я понял. предполагаем, что задача решаема написанием нужных обработчиков событий, но просто ломает куче контролей проставлять правильно все обработчики? так?

решение такое: обработчики событий делаем не методами формы, а методами нового класса-хендлера. в этом классе пишем метод Attach(AControl: TControl), который прописывает нужные обработчики.


 
Gero ©   (2004-06-11 01:17) [36]

Удалено модератором


 
Игорь Шевченко ©   (2004-06-11 01:18) [37]

nikkie ©   (11.06.04 01:16)


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


Примерно так, но еще и вызовом этих обработчиков в нужные моменты.


 
Profi ©   (2004-06-11 01:19) [38]

Удалено модератором


 
Gero ©   (2004-06-11 01:20) [39]


> Игорь Шевченко ©   (11.06.04 01:18)

А что изменит компонент?


 
Игорь Шевченко ©   (2004-06-11 01:21) [40]

Gero ©   (11.06.04 01:20)


> А что изменит компонент?


Количество строк кода, насколько я полагаю, в конечном итоге - скорость разработки


 
Gero ©   (2004-06-11 01:24) [41]


> Игорь Шевченко ©   (11.06.04 01:21)

А поконкретнее?
Интересно же, я лично не вижу, чем компонент может существенно помочь.


 
VID ©   (2004-06-11 01:25) [42]

KilkennyCat ©   (11.06.04 00:08) [14]
точно надо подать в суд на борланд :)


 
Profi ©   (2004-06-11 01:26) [43]

Удалено модератором
Примечание: Еще одно выступление и у тебя будет возможность читать


 
Игорь Шевченко ©   (2004-06-11 01:26) [44]

Gero ©   (11.06.04 01:24)


> Интересно же, я лично не вижу, чем компонент может существенно
> помочь.


А мне не менее интересно бескомпонентное решение :)


 
GuAV ©   (2004-06-11 01:27) [45]

Любителем компонентов, упражнение:
Написать два компонента - один - интежер, другой арифметическое дейтсвие (одно из +-*/ задаётся св-вом и операнды и результат - тоже св-во). и сравнить это с таким кодом C:=A+B;

зы - не подумайте, что я - противник компонентов...


 
Profi ©   (2004-06-11 01:30) [46]

>GuAV

Так же можно писать компонету изменения caption у label, это пустая трата времени и ни кому не нужно. Но когда используешь одни и те же функции, да еще и в разных программах, то компонент лучше модуля.
Однозначно! (c) Жириновский


 
Gero ©   (2004-06-11 01:30) [47]


> Игорь Шевченко ©   (11.06.04 01:26)

Эх, чувствую, что уйду спать, так и не узнав страшной тайны.


 
GuAV ©   (2004-06-11 01:33) [48]


> это пустая трата времени и ни кому не нужно

Прекрасно понимаю :)
поэтому я и привел этот пример. Глупо решать задачу Игоря Шевченко без компонентов, глупо решать мою через оные. "Каждому овощу..." (с) кто-не-помню


 
Profi ©   (2004-06-11 01:35) [49]

>GuAV

Согласен!


 
iZEN ©   (2004-06-11 01:37) [50]

Gero ©   (10.06.04 23:47).
Ну, во-первых, компонент работает в окружении, часто в собственном "фреймворке", то есть совместно с другими классами и сущностями. Поэтому написание компонента даже с одним методом - это ещё ни о чём не говорит, но может показать о том месте, которое занимает такой компонент (в иерархии, в цепочке взаимодействия и т.д.).

Во-вторых.
Вспомните паттерны проектирования.
Там же на каждом вздохе и чихе - класс или интерфейс, иногда с одним единственным абстрактным методом. И такой класс чертовски необходим для понимания мыслей авторов кода.

В-третьих.
Компонент сам по себе может быть довольно сложной сущностью с дочерними классами, редакторами свойств и т.д. Искусство создания компонента как раз и сосотоит в умении "выпячивать" только нужные свойства и методы для сторонних разработчиков так, чтобы с ним/с ними было удобно и легко работать, а не просто наслаждаться очередным шедевром компонентостроения.


 
nikkie ©   (2004-06-11 01:41) [51]

>[37] Игорь Шевченко
>Примерно так, но еще и вызовом этих обработчиков в нужные моменты.
так я не увидел резюме на решение, предложенное в [35] nikkie


 
Gero ©   (2004-06-11 01:46) [52]


> Поэтому написание компонента даже с одним методом - это
> ещё ни о чём не говорит

Особенно если этот метод - CopyFile :)


 
GuAV ©   (2004-06-11 01:48) [53]


>  а я написал компонент для messagebox"ов...

Между прочим я такое юзал, когда константы не помнил. Preview in designtime rulez.


 
Gero ©   (2004-06-11 01:49) [54]


> Между прочим я такое юзал, когда константы не помнил

А я F1 юзал :)


 
GuAV ©   (2004-06-11 01:53) [55]

Вы лучше обратите внимание на такое. Есть винапи функция диалога открытия файлов. она завёрнута в компонент TOpenDialog. Он завёрнут в функцию PromptForFileName.


 
Игорь Шевченко ©   (2004-06-11 10:31) [56]

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


 
Gero ©   (2004-06-11 11:02) [57]


> Игорь Шевченко ©   (11.06.04 10:31)
> создание менее десятка наследников является меньшим злом,
> чем написание функций, работающих со стандартными компонентами

Да ладно Вам...
Лучше написать с десяток наследников чем одну функцию, работающую со всеми?


 
Игорь Шевченко ©   (2004-06-11 11:13) [58]

Gero ©   (11.06.04 11:02)

И все-таки, хотелось бы услышать начальника транспортного цеха



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

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.032 c
1-1086913022
antonn
2004-06-11 04:17
2004.06.27
Не выключается комп


1-1087023428
Cherepah
2004-06-12 10:57
2004.06.27
TMaskEdit и TSpeedButton


3-1085984035
Andrey
2004-05-31 10:13
2004.06.27
Оптимизация запроса


8-1081886605
Юрий
2004-04-14 00:03
2004.06.27
JPEG ?! "низкоуровневый"


9-1077808784
Creep
2004-02-26 18:19
2004.06.27
Как зделать игру во весь икран сандартными средствами Dolphi