Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

как назначить одну процедуру многим компонентам   Найти похожие ветки 

 
alexm   (2005-09-22 10:03) [0]

Добрый день! Ситуация такова:имеется 25 ComboBox  и 25 Shape. При изменении в поле ComboBox  соответствующая Shape изменяет цвет.Процедура написана для ComboBox1 и Shape1. Как сделать так чтобы не переписывать эту  же  процедуру для остальных ComboBox.


 
Digitman ©   (2005-09-22 10:16) [1]

как сейчас выглядит эта процедура ?


 
icWasya ©   (2005-09-22 11:30) [2]

Самое простое - сделать Fame с Combobox и Shape. Обработчик ComboboxClick сделать методом Frame. А на форму поместить уже 25 Frame и ничего не надо будет менять.


 
alexm   (2005-09-22 13:27) [3]

В даный момент процедура выглядит так:

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.ItemIndex <> 0 Then
    begin
     Shape1.Brush.Color:= clRed ;
     Edit1.Text:=TimeToStr(Time);
    end
 else
   begin
 Shape1.Brush.Color:= clGreen;
 Edit1.Text:="";
   end;
end;


 
Leonid Troyanovsky ©   (2005-09-22 14:47) [4]


> alexm   (22.09.05 10:03)  
> Добрый день! Ситуация такова:имеется 25 ComboBox  и 25 Shape.
>  При изменении в поле ComboBox  соответствующая Shape изменяет
> цвет.Процедура написана для ComboBox1 и Shape1. Как сделать
> так чтобы не переписывать эту  же  процедуру для остальных
> ComboBox.


IMHO, достаточно 25 Shape и 2 комбобокса - в одном выбирается shape,
а в другом - цвет.
И то и другое можно засунуть в Objects оных комбобоксов в Form.OnCreate.
Процедура (например) OnClick назначается им одна.
Что-то вроде:

if (cb1.ItemIndex >= 0) and (cb2.ItemIndex >= 0 then
  TShape(cb1.Items.Objects[cb1.ItemIndex]).Brush.Color :=  TColor(cb2.Items.Objects[cb2.ItemIndex]);

--
Regards, LVT.


 
Digitman ©   (2005-09-22 15:11) [5]


> alexm   (22.09.05 13:27) [3]


> имеется 25 ComboBox  и 25 Shape


Соблюдаются ли при этом следующие условия :

1. Соответствуют ли имена компонентов класса TComboBox стр.представлению шаблона "ComboBoxN", где N = "1".."25" ?

2. Соответствуют ли имена компонентов класса TShape соответствуют стр.представлению шаблона "ShapeN", где N = "1".."25" ?

3. Каждому ComboBoxN поставлено ли в лог.соответствие ShapeN ?

предположим, что каждому компоненту с именем "ComboBoxN" поставлен в лог.соответствие компонент с именем "ShapeN", где N есть стр.представление целого числа в диапазоне [1..25]

тогда :

procedure TForm1.SomeComboBoxChange(Sender: TObject);
var
sIdx: String;
Shape: TShape;
begin
with TComboBox(Sender) do
begin
 sIdx := StringReplace(Name, "ComboBox", "", []);
 Shape := TShape(FindComponent("Shape"+sIdx));
 if ItemIndex <> 0 Then
   begin
    Shape.Brush.Color:= clRed ;
    Edit1.Text:=TimeToStr(Time);
   end
else
  begin
    Shape.Brush.Color:= clGreen;
    Edit1.Text:="";
  end;
end;
end;

в ран- или дизайн-тайм назначаешь метод SomeComboBoxChange() в кач-ве обработчика события OnChange всех своих 25-ти ComboBox"ов

подход к решению задачи, конечно же, "дубовый", но для ДАННЫХ условий сойдет.


 
alexm   (2005-09-22 16:27) [6]

Digitman, спасибо за идею.  Условия которые Вы указали действительно имеют место.  Но к сожалению  программа стопорит  при выполнении этого оператора:  Shape.Brush.Color:= clGreen; Что с ним не так не могу понять.


 
Digitman ©   (2005-09-22 16:47) [7]


> Что с ним не так не могу понять


а КАК ты пытался понять ? конкретнее ...


> программа стопорит  


я не знаю, что такое "программа стопорит" ..


 
alexm   (2005-09-22 17:21) [8]

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


 
_RusLAN ©   (2005-09-22 17:59) [9]


> with TComboBox(Sender) do
> begin
>  sIdx := StringReplace(Name, "ComboBox", "", []);
>  Shape := TShape(FindComponent("Shape"+sIdx));
>  if ItemIndex <> 0 Then
>    begin


ИМХО надо
Form1.FindComponent("Shape"+sIdx)
а то так вызывается метод ФиндКомпонент у Комбобокса а не у формы


 
Digitman ©   (2005-09-22 18:04) [10]


> Старался разобратся  в его логике работы


Как ? Конкретно ?

Описывай пошагово и детально свои действия ..


> Компиляция проходит нормально


Подразумевалось. Принято.


> при выполнении даного оператора, генерируется исключительная
> ситуация


ГДЕ детальные подробности ?
Скопировать сюда "один-в-один" текст увиденного тобой сообщения об исключении , думаю, вовсе не требует знания буржуйского языка.


> С английским у меня еще хуже  чем с Delphi


Печально.
Хлебнешь горя. И не раз.
Займись пробелом в этих знаниях безотлагательно.


 
jack128 ©   (2005-09-22 18:44) [11]

_RusLAN ©   (22.09.05 17:59) [9]
Form1.FindComponent("Shape"+sIdx)

ну уж тогда Self.FindComponent


 
alexm   (2005-09-23 11:46) [12]

Спасибо всем кто помогал. Уже все работает. Но у меня еще один вопрос. Почему я не могу присвоить некой переменной свойство Caption  компонента  TGroupBox. Делалось так объявлялась переменная типа TGoupBox, потом выполнялся поиск компонента
  Gp := TGroupBox(Self.FindComponent("Group"+Sid)); далее строквой переменной  S   необходимо присвоить значение  GroupBox().Caption. Но оператор S:=Gp.Caption; неработает. Прбовал просматривать значение переменной  S во время выполнения программы -оно всегда "" (пусто).  Если написать S:=Group1Box.Caption  то все работает


 
Digitman ©   (2005-09-23 12:09) [13]

а чему при этом равен Sid ?

и чему после поиска равно Gp.Name ?


 
alexm   (2005-09-23 12:44) [14]

Sid - это идентификатор номера  компонента. Его значения в пределах 1 - 25.В зависимости от того какой компонент вызвал событие. К сожалению у меня почемуто не работает фунция поиска  компонента,отсюда и проблема. Хотя другие компоненты находятся нормалтно.


 
Digitman ©   (2005-09-23 15:18) [15]


>  меня почемуто не работает фунция поиска  компонента


что значит "не работает" ?

если бы компонент не был найден, ты получил бы AV-исключение при обращении к Gp.Caption, в противном случае компонент заведомо найден ... а вот ЧТО же за компонент найден - в том-то и вопрос ...


 
msguns ©   (2005-09-23 15:25) [16]

Если контролы визуальные, вместо номеров в качестве аргументов поиска нужного рекомендую использовать тэги и контейнеризацию (каждая пара комбобокс+шэйп на "своей" панельке) и Controls+ControlCount для поиска нужной панели на панеле-платформе.


 
msguns ©   (2005-09-23 15:25) [17]

Если контролы визуальные, вместо номеров в качестве аргументов поиска нужного рекомендую использовать тэги и контейнеризацию (каждая пара комбобокс+шэйп на "своей" панельке) и Controls+ControlCount для поиска нужной панели на панеле-платформе.


 
umbra ©   (2005-09-23 15:30) [18]

FindComponent возвращает TComponent, общий предок всех компонентов. У него нет свойства Caption. Надо намекнуть делфи, что этот TComponent кроме всего прочего еще и TGroupBox

S:=(Gp as TGroupBox).Caption


 
Digitman ©   (2005-09-23 15:36) [19]


> umbra ©   (23.09.05 15:30) [18]


> Надо намекнуть


ну автор же  и намекнул !

см.


> TGroupBox(Self.FindComponent


и, поскольку якобы не схлопотал при этом исключение, то что он нашел ДЕЙСТВИТЕЛЬНО является компонентом класса TGroupBox ..

а вот кто такой тут Self - это еще под вопросом ..


 
umbra ©   (2005-09-23 15:44) [20]


> Gp := TGroupBox(Self.FindComponent("Group"+Sid));

А групбоксы называются Group1, Group2 ... или GroupBox1, GroupBox2 ... ?
Если GroupBox1 ... то цитируемый код не нашел ничего.


 
Digitman ©   (2005-09-23 15:52) [21]


> umbra ©   (23.09.05 15:44) [20]


> групбоксы называются Group1, Group2 ... или GroupBox1, GroupBox2
> ... ?


почем мне знать ? у автора уточнять нужно .. а он пропал аки партизан брянский)..


> Если GroupBox1 ... то цитируемый код не нашел ничего


если автор не врет (цитирую)


Прбовал просматривать значение переменной  S во время выполнения программы -оно всегда ""


то что-то там класса TGroupBox он таки нашел, иначе схлопотал бы исключение, и хнык при этом был бы на совершенно иную тему..


 
alexm   (2005-09-24 22:56) [22]

Прошу прощения за временное отсувствие.

> umbra
> А групбоксы называются Group1, Group2 ... или GroupBox1,
>  GroupBox2 ... ?

 GroupBox называются TGroupBox1  и т.д..

> Если GroupBox1 ... то цитируемый код не нашел ничего.

Если можно то поясните почему


> Digitman
> о что-то там класса TGroupBox он таки нашел, иначе схлопотал
> бы исключение

Исключения  программа не выдает.Также просматривал значение переменной Gp. После оператора  Gp := TGroupBox(Self.FindComponent("Group"+Sid)); оно равно  nill.


 
alexm   (2005-09-24 23:27) [23]

Большое спасиб всем кто помогал. Уже все заработало. Я просто изменил переменную в операторе Gp := TGroupBox(Self.FindComponent("Group"+Sid));
Вместо Gp поставил GroupBox. Можно считать вопрос исчерпаным.



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

Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.044 c
6-1120273852
yurikon
2005-07-02 07:10
2005.10.23
ICQ


1-1127995363
superoberon
2005-09-29 16:02
2005.10.23
Прозрачность DBGrid


6-1120196627
Dust
2005-07-01 09:43
2005.10.23
Сколько данных читать из неблокирующего сокета?


14-1127992446
igor666
2005-09-29 15:14
2005.10.23
Подскажите плз. есть ли какой-нибудь компонент...


14-1127894061
Digitman
2005-09-28 11:54
2005.10.23
Задрал уже этот MS Word 2003..





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