Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2013, 22:35   #11
WIDGET1
Пользователь
 
Регистрация: 06.12.2011
Сообщений: 22
По умолчанию

ДА!!!!
Цитата:
Сообщение от Аватар Посмотреть сообщение
все гораздо хуже - передаваемый параметр ни как с ними не связан.
Посоветуйте как короче и проще, за 2 вечера 490 строк уже наваяла, просто уже ничего не понимаю. Если просто три раза переписать эту функцию под разные эдиты это будет правильно, точнее это не будет убогим кодом?...
WIDGET1 вне форума Ответить с цитированием
Старый 27.03.2013, 23:41   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
точнее это не будет убогим кодом?...
Будет. По крайней мере при таком содержимом обработчика.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.03.2013, 07:43   #13
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Попробуйте это
Код:
var
  _EditArray: array of TEdit;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength (_EditArray, 3);
  _EditArray[0] := Edit1;
  _EditArray[1] := Edit2;
  _EditArray[2] := Edit3;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
var
  i, j: Integer;
begin
  j := RadioGroup1.ItemIndex;
  for i := Low(_EditArray) to High(_EditArray) do begin
    if i = j then begin
      _EditArray[i].Text := '';
      _EditArray[i].Enabled := False;
    end
    else
      _EditArray[i].Enabled := True;
  end;
end;
Sibedir вне форума Ответить с цитированием
Старый 28.03.2013, 12:13   #14
WIDGET1
Пользователь
 
Регистрация: 06.12.2011
Сообщений: 22
По умолчанию

Ребята, вот что я выдумала, общая процедура. И не сильно громоздко, только как-то по-детски, да?

Код:
var
  _EditArray: array of TEdit;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength (_EditArray, 3);
  _EditArray[0] := Edit1;
  _EditArray[1] := Edit2;
  _EditArray[2] := Edit3;
end;



procedure Tedit_record.RadioClick(Sender: TObject);
var
  ind: Integer;
  s1:string;
begin
s1:=copy(tRadioGroup(sender).name,length(tRadioGroup(sender).name),1);
ind:=strtoint(s1)-1;
if tRadioGroup(sender).ItemIndex=0 then
begin
_EditArray[ind].Text := '';
_EditArray[ind].Enabled := False;
end
    else
      _EditArray[ind].Enabled := True;
  end;
Вдохновил Sibedir на это))а то спать не могла аж
WIDGET1 вне форума Ответить с цитированием
Старый 28.03.2013, 12:51   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, в целом нормально. Только учтите, что при таком подходе (я про Copy( Name, Length(Name), 1) вы сможете обработать только девять штук Edit...
и я бы Ваш код записал так:
Код:
procedure Tedit_record.RadioClick(Sender: TObject);
var
  ind: Integer;
  s1:string;
begin
  s1:=copy(tRadioGroup(sender).name,length(tRadioGroup(sender).name),1);
  ind:=StrToIntDef(s1, 0) - 1; {если последний символ не цифра - вернётся ноль...}
  if (ind>=0) and ( ind<=High(_EditArray) ) then
     _EditArray[ind].Enabled := tRadioGroup(sender).ItemIndex<>0;

 if tRadioGroup(sender).ItemIndex=0 then 
     _EditArray[ind].Text := '';

end;

а ещё, можно легко написать код, когда массив EditArray из Edit'ов совсем не нужен. Ну тогда привязку Radiogroup к Edit нужно будет осуществлять через имя компонента ( RadioGroup1 - Edit1, RadioGroup2 - Edit2, ..., RadioGroup15 - Edit15 и т.д.) Набросать примерчик?

Хотя, Ваш код из пост #14 вполне себе достойный, ничего особо детского/ужасного/идусского в этом коде нет. если Вас устраивает - можете спокойно пользоваться.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2013, 12:35   #16
WIDGET1
Пользователь
 
Регистрация: 06.12.2011
Сообщений: 22
По умолчанию

Спасибо за ответы! Но тут еще один вопрос по процедурам. У меня есть процедура в одном юните, можно ли как-то передать значение переменной из этой процедуры в другой юнит?
WIDGET1 вне форума Ответить с цитированием
Старый 30.03.2013, 16:01   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Переменная локальна для процедуры?
Если да то опиши во втором юните глобальную переменную, и в первом в нее передавай, указав uses второймодуль после implementation.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2013, 19:38   #18
WIDGET1
Пользователь
 
Регистрация: 06.12.2011
Сообщений: 22
По умолчанию

Елки-палки...
Переменная stroka объявлена в юните3, используется в юните 1. Вот этой процедурой.
Код:
/ЗАПРОС О СТУДЕНТЕ ПО НОМЕРУ ЗАЧЕТКИ
procedure TGlavn.N7Click(Sender: TObject);
var j:integer;
zach_n:string;
begin
zach_n:=inputbox('О студенте','Введите номер зачетки','');
for j := 1 to stringgrid1.rowcount - 1 do

if stringgrid1.cells[0,j]=zach_n then
begin
 stroka:=inttostr(j); zapros.Show; //форма для вывода результата
 end
else
if j=stringgrid1.rowcount-1 then
  begin showmessage('Такой номер отсутствует!');
  end;
end;
Если переменная stoka локальна для процедуры TGlavn.N7Click, то все работает точно(хотя проверки на ввод не написаны-это черновой вариант для понятия верности хода мыслей и главное-без вывода из юнита3 значение переменной stroka). Если переменная в Юнит3, то если номер есть, то открывается форма zapros(юнит3), после этого выводится номер строки, в которой совпадающий номер из инпутбокса:
Код:
procedure TZapros.FormShow(Sender: TObject);
begin
showmessage(stroka);
end;
НО!!! После нажатия кнопки ОК на showmessage выскакивает showmessage из юнита1 и говорит,что такой номер отсутствует. Не могу понять почему он на то условие возвращается...
WIDGET1 вне форума Ответить с цитированием
Старый 30.03.2013, 19:46   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ненене... Сделай public переменку в форме zapros. А далее:
Код:
begin
 stroka:=inttostr(j); 
 zapros.Переменка:=stroka;
 zapros.Show; //форма для вывода результата
 end
и
Код:
procedure TZapros.FormShow(Sender: TObject);
begin
showmessage(Переменка);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2013, 20:08   #20
WIDGET1
Пользователь
 
Регистрация: 06.12.2011
Сообщений: 22
По умолчанию

Код:
procedure TGlavn.N7Click(Sender: TObject);
var j:integer;
zach_n,stroka:string;

begin
stroka:='';
zach_n:=inputbox('О студенте','Введите номер зачетки','');
for j := 1 to stringgrid1.rowcount - 1 do
if stringgrid1.cells[0,j]=zach_n then
begin
 stroka:=inttostr(j);
 zapros.M:=stroka;
 zapros.Show; //форма для вывода результата
 end
else

if  (stroka='') and (j=stringgrid1.rowcount-1) then
  showmessage('Такой номер отсутствует!');

 end;
Вот так заработало.

Последний раз редактировалось WIDGET1; 30.03.2013 в 20:51.
WIDGET1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать программу через параметры-значений и параметры-ссылок bufalo C# (си шарп) 3 14.12.2011 17:10
ПАРАМЕТРЫ-КОНСТАНТЫ, НЕТИПИЗИРОВАННЫЕ ПАРАМЕТРЫ ПОДПРОГРАММ, МАССИВЫ И СТРОКИ ОТКРЫТОГО ТИПА Юрий62 Помощь студентам 1 04.12.2011 14:09
Параметры запуcка. как обрабатывать параметры вида -somecmd "?" Человек_Борща Общие вопросы Delphi 1 15.01.2011 15:48
ПАРАМЕТРЫ-КОНСТАНТЫ, НЕТИПИЗИРОВАННЫЕ ПАРАМЕТРЫ ПОДПРОГРАММ, МАССИВЫ И СТРОКИ ОТКРЫТОГО ТИПА Kira09 Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2010 17:28
Как передать в поток параметры? И как из потока параметры достать? Anekdot Общие вопросы Delphi 2 19.02.2010 22:40