Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:10 01.06.24 
Компютри и Интернет
   >> Delphi
*Кратък преглед

Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
Тема Има ли начиннови  
Автор Timo (собствен ник )
Публикувано21.03.12 01:16



Има ли начин вместо да кълва постояно:
CheckBox1.Enabled:=False;
CheckBox2.Enabled:=False;
CheckBox3.Enabled:=False;
CheckBox4.Enabled:=False;
CheckBox5.Enabled:=False;
CheckBox6.Enabled:=False;
CheckBox7.Enabled:=False;
CheckBox8.Enabled:=False;
CheckBox9.Enabled:=False;
CheckBox10.Enabled:=False;

да напиша нещо обобщаващо
примерно CheckBox1-10:=False





Тема Re: Има ли начиннови [re: Timo]  
Автор Naki (Company PC Guy)
Публикувано21.03.12 01:32



Има начин, с цикъл.
Сега е късно, утре ще дам повече инфо.




Тема Re: Има ли начиннови [re: Timo]  
Автор andrew_nikoloff (bugbuster)
Публикувано21.03.12 09:39



Има много начини да го направиш. Не мога да ти кажа, кой е най-подходящ за теб, защото не ти познавам проекта. Така че ти ще си избереш.
Можеш да си направиш един масив (или списък) от контролите и да обхождаш него:


var aCheckBoxes: Array[1..10] of TCheckBox;
aCheckBoxes[1] := CheckBox1;
...
aCheckBoxes[10] := CheckBox10;
for idx := 1 to 10 do aCheckBoxes[idx].Checked := False;


Можеш да си обхождаш контейнера (форма, панел), в който се намират те и да си ги търсиш:

for idx := 0 to Container.ControlCount - 1 do
if Container.Controls[idx] is TCheckBox then
(Container.Controls[idx] as TCheckBox).Checked := False;

Това можеш да го направиш и рекурсивно, ако имаш вложени панели например.

Също така можеш да използва RTTI за да си вземеш компонентите и да им пипаш пропъртитата. Виж например за повече информация.

Linux isn't free, it's worthless.




Тема Re: Има ли начиннови [re: andrew_nikoloff]  
Автор Naki (Company PC Guy)
Публикувано21.03.12 12:17



Странни решения, аз не бих го направил така.
Особено това със RTTI-то ми се струва като биене на пилци с топ.


Вярно, аз пиша на C++ Builder, а не на Делфи.

Ето кода:

for(char i=1;i<=10;i++)
((TCheckBox*)FindComponent("CheckBox"+IntToStr(i)))->Enabled=false;


Не знам как баш се транслира това към Делфи код, ама трябва да стане.


Редактирано от Naki на 21.03.12 12:35.



Тема Re: Има ли начиннови [re: Naki]  
Автор andrew_nikoloff (bugbuster)
Публикувано21.03.12 12:22



Толкова много полезна информация даде с постингите си по темата, че чак ми стана интересно какво решение предлагаш на човека... Би ли го споделил с нас все пак?

Linux isn't free, it's worthless.




Тема Re: Има ли начиннови [re: andrew_nikoloff]  
Автор Naki (Company PC Guy)
Публикувано21.03.12 12:30



Да, редактирах се и го дадох.




Тема Re: Има ли начиннови [re: Naki]  
Автор andrew_nikoloff (bugbuster)
Публикувано21.03.12 12:42



Това е същото, като вариант 2, но с търсене по име, а не по индекс. Ако няма други компоненти в контейнера, много по-ефективно е да си ги обходиш веднъж.

Linux isn't free, it's worthless.




Тема Re: Има ли начиннови [re: andrew_nikoloff]  
Автор Naki (Company PC Guy)
Публикувано21.03.12 12:44



* По-късо е.
* Твоят вариант 2 ще смени всички checkbox-и. А той може да иска да смени веднъж само от 1 до 10ти, веднъж само от 5 до 10, или от 20 до 30/etc.
* Какво значи по-ефективно? Колко ms разлика?


Редактирано от Naki на 21.03.12 12:45.



Тема Re: Има ли начиннови [re: Naki]  
Автор andrew_nikoloff (bugbuster)
Публикувано21.03.12 13:13



* По-късо е.
По-късо е, защото си си спестил проверките. Със същия успех можеш да напишеш
for idx := 0 to Container.ControlCount - 1 do (Container.Controls[idx] as TCheckBox).Checked := False;
Какво ще стане ако изтрие CheckBox7? Проектът ще се компилира без проблем и ще получиш красиви AV-та по време на изпълнение на програмата. Обикновено това се случва само при клиента, нали се сещаш?
И защо всичките С-джии смятате, че по-късият израз е по-добър? Обикновено е само по-неясен.

* Твоят вариант 2 ще смени всички checkbox-и. А той може да иска да смени веднъж само от 1 до 10ти, веднъж само от 5 до 10, или от 20 до 30/etc.
Ако те са си обособени в някакъв контейнер (както би било логично), това си е каквото иска. Аз му дадох няколко алтернативи. Само той си знае проекта какъв е, какво прави и как го прави. Винаги може да комбинира няколко от 4-те предложени му подхода.

* Какво значи по-ефективно? Колко ms разлика?
Какво означава "Колко ms"? Въпросът е в излишните операции. Освен индексирането, ти обхождаш компонентите на всяка итерация наново, плюс това сравняваш стрингове. Ако тази допълнителна гъвкавост не ти е необходима, защо трябва да ги правиш?

И защо изобщо го водиш този спор? Ако ще предлагаш на човека решение - предложи му! А не "Ще ти кажа, ама друг път". Все едно си пазиш ред, да не те изпревари някой. Или "Аз не бих го направил така" ама без и да казваш как...

Linux isn't free, it's worthless.




Тема Re: Има ли начиннови [re: andrew_nikoloff]  
Автор Naki (Company PC Guy)
Публикувано21.03.12 13:38



Е ОК, дай да видиме питащия какво ще каже...

А иначе, това дето съм написал след 1 часа през ноща беше от таблет (докато лежах в леглото), и затова просто нямаше как да дам кода.

EDIT: Спомена "клиент" - не съм сигурен, че човека има клиент, може би все още няма и/или прави некви нещица за себе си.


Редактирано от Naki на 21.03.12 19:08.




Страници по тази тема: 1 | 2 | 3 | 4 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.