Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2012, 09:32
Fenix1989 Fenix1989 вне форума
Прохожий
 
Регистрация: 26.09.2012
Сообщения: 11
Репутация: 10
По умолчанию Не видит индекс

Доброе утро. Пожалуйста, посмотрите кусок кода, который не совсем корректно работает:


В Unit1 :

Код:
procedure TForm1.Makro(Var U8, U5, MU8, MU5, O1, MO1, MU : TMasMin);
var  f: File of TElementi;
U8w, U5w, O1w : TElementi;
i, j: integer;
begin
..................

Form3.ComboBox4.Clear;
Form3.ComboBox4.Items.Add('U238');
Form3.ComboBox4.Items.Add('U235');
Form3.ComboBox4.Items.Add('U');
if Form3.RadioButton1.Checked = True  then
Form3.ComboBox4Change(Form3.ComboBox4 , 0, MU5, MU8, MO1, MU);

end;
........
end;

В Unit3 :

Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin);
var
i, j : integer;
begin
if k = 0 then
begin
case Form3.ComboBox4.ItemIndex  of
0: VivodMakr(MU8w);
1: VivodMakr(MU5w);
2:  begin
for i:=1 to 4 do
for j:=1 to 4 do
MUw[i, j]:=MU5w[i, j]+MU8w[i, j];

VivodMakr(MUw);
end;
end;
end;
end;

Процедура VivodMakr должна должна выводить предложенный ей массив TMasMin: array[1..4, 1..4] of real в таблицу StringGrid. И, собственно, без процедуры
Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin);
все работает прекрасно.Все ли я правильно сделал при её описании, потому что при запуске таблица пустует, ей не передается индекс и она просто не делает вычислений. И почему в процедуре
Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin);
end-ов больше, чем begin-ов , хотя, если один убрать -- ругается.
Ответить с цитированием
  #2  
Старый 27.09.2012, 09:48
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fenix1989
Все ли я правильно сделал при её описании, потому что при запуске таблица пустует, ей не передается индекс и она просто не делает вычислений.
При запуске чего таблица должна заполниться?
Цитата:
Сообщение от Fenix1989
И почему в процедуре
Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin);
end-ов больше, чем begin-ов , хотя, если один убрать -- ругается.
Потому что если бы ты нормально форматировал свой код, то такой вопрос у тебя даже не возник бы.
Вот как твоя TForm3.ComboBox4Change выглядит отформатированной:
Код:
procedure TForm3.ComboBox4Change(Sender: TObject; k: integer; var MU5w, MU8w, MO1w, MUw: TMasMin);
var
  i, j: integer;
begin
  if k = 0 then
  begin
    case Form3.ComboBox4.ItemIndex of
      0: VivodMakr(MU8w);
      1: VivodMakr(MU5w);
      2: begin
          for i := 1 to 4 do
            for j := 1 to 4 do
              MUw[i, j] := MU5w[i, j] + MU8w[i, j];

          VivodMakr(MUw);
        end;
    end;
  end;
end;
Ответить с цитированием
  #3  
Старый 27.09.2012, 09:57
Fenix1989 Fenix1989 вне форума
Прохожий
 
Регистрация: 26.09.2012
Сообщения: 11
Репутация: 10
По умолчанию

Я подразумевал, что при изменении ItemIndex ComboBox4 в Unit3.
Это прописано процедурой VivodMakr(var Q: TMAsMin); -- она работает корректно -- проверял, да, и если убрать чехарде с Combobox4 она заработает
Ответить с цитированием
  #4  
Старый 27.09.2012, 10:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fenix1989
Я подразумевал, что при изменении ItemIndex ComboBox4 в Unit3.
Это прописано процедурой VivodMakr(var Q: TMAsMin); -- она работает корректно -- проверял, да, и если убрать чехарде с Combobox4 она заработает
При программном изменении ItemIndex событие OnChange у TComboBox не срабатывает, его нужно вызывать "вручную".
При визуальном изменении ItemIndex (т.е. при выборе из выпадающего списка нужного элемента) событие OnChange срабатывает, но для этого нужно чтобы обработчик события был присвоен свойству события (например в инспекторе объектов на вкладке Events), но твою TForm3.ComboBox4Change туда присвоить не получится, так как типы параметров и их количество у неё не совпадают с теми которые там нужны.
Ответить с цитированием
  #5  
Старый 27.09.2012, 10:17
Fenix1989 Fenix1989 вне форума
Прохожий
 
Регистрация: 26.09.2012
Сообщения: 11
Репутация: 10
По умолчанию

Понял, почти. Спасибо
Ответить с цитированием
  #6  
Старый 27.09.2012, 10:26
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fenix1989
Понял, почти. Спасибо
Если кратко, то бросаешь на форму TComboBox и щёлкаешь по нему двойным щелчком - при этом создастся и откроется заготовка для обработчика события OnChange - вот в ней и пиши свой код. Только не нужно там ему добавлять дополнительные параметры, иначе будет несоответствие типов.
Ответить с цитированием
  #7  
Старый 27.09.2012, 10:34
Fenix1989 Fenix1989 вне форума
Прохожий
 
Регистрация: 26.09.2012
Сообщения: 11
Репутация: 10
По умолчанию

А вызвал я её правильно с Unit1, если теперь оставить только Sender: TObject?
Код:
Form3.ComboBox4Change(Form3.ComboBox4);
Ответить с цитированием
  #8  
Старый 27.09.2012, 10:38
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fenix1989
А вызвал я её правильно с Unit1, если теперь оставить только Sender: TObject?
Код:
Form3.ComboBox4Change(Form3.ComboBox4);
Да, правильно.

А если в обработчике события не проверяется кто вызвал это событие, то можно ещё и так вызывать:
Код:
Form3.ComboBox4Change(nil);
Ответить с цитированием
  #9  
Старый 27.09.2012, 10:41
Fenix1989 Fenix1989 вне форума
Прохожий
 
Регистрация: 26.09.2012
Сообщения: 11
Репутация: 10
По умолчанию

Спасибо большое.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter