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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 18:50   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию Как считать название процедур из файла и вызвать их в программе?

Здравствуйте уважаемые эксперты! Возникла проблема: у меня есть следующие коды процедур:
Код:
....................................
procedure DrawingOfTire1;
begin
With MainFormOfKKR.Canvas do // к каждой последующей строке добавляем MainFormOfKKR.Canvas
begin
PolyGon([Point(20,10),Point(795,10)]); //точки 1 и 2
PolyGon([Point(20,25),Point(510,25)]); //точки 3 и 114
PolyGon([Point(514,25),Point(795,25)]); //точки 116 и 4
TextOut(350, 11, 'Внутренняя шина данных');
end;
end;

procedure DrawingOfArrow1;
begin
With MainFormOfKKR.Canvas do // к каждой последующей строке добавляем MainFormOfKKR.Canvas
begin
PolyGon([Point(43,35),Point(43,60)]); //точки 7 и 9
PolyGon([Point(47,35),Point(47,60)]); //точки 8 и 10
PolyGon([Point(45,25),Point(38,40)]); //точки 15 и 11
PolyGon([Point(45,25),Point(52,40)]); //точки 15 и 12
PolyGon([Point(45,70),Point(38,55)]); //точки 16 и 13
PolyGon([Point(45,70),Point(52,55)]); //точки 16 и 14
TextOut(20, 40, 'ШД');
end;
end;

procedure DrawingOfBlock1;
begin
With MainFormOfKKR.Canvas do // к каждой последующей строке добавляем MainFormOfKKR.Canvas
begin
Rectangle(10,110,80,70); //точки 5 и 6
TextOut(15, 71, 'Регистр и');
TextOut(15, 83, 'буфер ши-');
TextOut(15, 94, 'ны данных');
end;
end;
..................................
Как мне сделать так, чтобы если я считываю имена этих процедур из файла, программа по нажатию кнопки выполнила эти процедуры(т.е. нарисовала необходимые элементы)?
StudeHt вне форума Ответить с цитированием
Старый 31.05.2011, 19:07   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Через switch, видимо...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 31.05.2011, 19:08   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Через switch, видимо...
в делфях/паскалях через if )
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 31.05.2011, 19:09   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
  case (index) of
    1: DrawingOfTire1();
    2: DrawingOfArrow1();
    3: DrawingOfBlock1();
  end;
что, хотели динамически? забудьте, это не яваскрипт.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 31.05.2011, 19:20   #5
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

у меня 75 процедур, а задействованы могут быть всего 15, все-равно через case делать или есть еще способы?
StudeHt вне форума Ответить с цитированием
Старый 31.05.2011, 19:21   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> задействованы могут быть всего 15

ну вот эти 15 в case и забей, делов то
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.06.2011, 21:05   #7
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Здравствуйте. Вот я начал делать:
Код:
procedure TMainFormOfKKR.ButtonProblemRealizationClick(Sender: TObject);
 var
  f:textfile;
  mas:array[1..75] of integer;
  n:integer;
  i:integer;
begin
  assignfile (f,'a.txt');
  reset(f);
  n:=0;
  while not eof (f) do
    begin
      read(f,mas[n]);
      n:=n+1;
    end;
  With MainFormOfKKR.Canvas do // к каждой последующей строке добавляем MainFormOfKKR.Canvas
    begin
      Pen.Width:=2;
      Pen.Color:=clRed;
      Font.Size:=1;
      Font.Color:=clBlack;
    end;
  for i:=1 to n do
    case (Mas[i]) of
      1: DrawingOfTire1;
      2: DrawingOfTire2;
    end;
end;
Я присвоил процедурам уникальные имена и считываю их индексы из файла. Мне нужно чтобы обе процедуры выполнились, потому что в файле содержатся оба индекса, но рисуется толко последняя, как исправить чтобы рисовались обе???
StudeHt вне форума Ответить с цитированием
Старый 01.06.2011, 21:30   #8
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

куча ифов примерно таких

Код:
  for i:=1 to n do
   begin
    if Mas[i] in [1,2,5{это к примеру}] then DrawingOfTire1;
    if Mas[i] in [1,2,8{это к примеру}] then DrawingOfTire2;
   end
при таком раскладе при значении 1 или 2 будут выполняться обе при значении 5 только первая, 8 - только вторая
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 21:38   #9
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Цитата:
у меня 75 процедур, а задействованы могут быть всего 15, все-равно через case делать или есть еще способы?
можно тела этих проуедцр и забить в case

Код:
procedure Draw(index: integer);
begin
 case i of 
  1:
With MainFormOfKKR.Canvas do // к каждой последующей строке добавляем MainFormOfKKR.Canvas
begin
PolyGon([Point(20,10),Point(795,10)]); //точки 1 и 2
PolyGon([Point(20,25),Point(510,25)]); //точки 3 и 114
PolyGon([Point(514,25),Point(795,25)]); //точки 116 и 4
TextOut(350, 11, 'Внутренняя шина данных');
end;
  2:
With MainFormOfKKR.Canvas do // к каждой последующей строке добавляем MainFormOfKKR.Canvas
begin
PolyGon([Point(43,35),Point(43,60)]); //точки 7 и 9
PolyGon([Point(47,35),Point(47,60)]); //точки 8 и 10
PolyGon([Point(45,25),Point(38,40)]); //точки 15 и 11
PolyGon([Point(45,25),Point(52,40)]); //точки 15 и 12
PolyGon([Point(45,70),Point(38,55)]); //точки 16 и 13
PolyGon([Point(45,70),Point(52,55)]); //точки 16 и 14
TextOut(20, 40, 'ШД');
end;
  3:
Rectangle(10,110,80,70); //точки 5 и 6
TextOut(15, 71, 'Регистр и');
TextOut(15, 83, 'буфер ши-');
TextOut(15, 94, 'ны данных');

///// и так далее все 75
 end;
 
end;
дальше просто делаешь преобразование входной текстовой строки в код, после чего делаешь вызов draw(code)
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 21:53   #10
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Swarog, спасибо!
StudeHt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как считать с текстового файла? denim1 Помощь студентам 2 16.05.2010 15:06
Как считать массив из файла? Ronin021992 Общие вопросы C/C++ 4 16.12.2009 20:44
Как вызвать диалог свойств файла? Пепел Феникса Общие вопросы Delphi 2 21.09.2009 01:17
обновление в блоге - Решение задач: как программе удалить саму себя или как изменить название исполняемог Pblog Обсуждение статей 0 27.06.2009 23:20
Считать название по ID artemavd БД в Delphi 4 15.05.2009 08:14