Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена if else 
:(
    Опции темы
Чучмек
Дата 4.8.2012, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Ну вот можно сделать по аналогии
Код

type
 tfunc=function(AOwner: TComponent;txt:string):tcontrol;
 tcall=record
  cond:string;
  func:tfunc;
 end;

var mcall:array of tcall;

function _label(AOwner: TComponent;txt:string):tcontrol;
 begin
 result:=tlabel.Create(AOwner);
 (result as tlabel).Caption:=txt;
 end;
function _button(AOwner: TComponent;txt:string):tcontrol;
 begin
 result:=tbutton.Create(AOwner);
 (result as tbutton).Caption:=txt;
 end;
function _edit(AOwner: TComponent;txt:string):tcontrol;
 begin
 result:=tedit.Create(AOwner);
 (result as tedit).Text:=txt;
 end;
function _panel(AOwner: TComponent;txt:string):tcontrol;
 begin
 result:=tpanel.Create(AOwner);
 (result as tpanel).Caption:=txt;
 end;
function _else(AOwner: TComponent;txt:string):tcontrol;
 begin
 result:=nil;
 end;

function call(v:string;AOwner: TComponent;txt:string):tcontrol;
var
 min,max,center,oldcenter,cr:integer;
begin
min:=0;
max:=length(mcall);
oldcenter:=0;
while true do
 begin
 center:=min +((max-min) shr 1);
 if center=oldcenter then
  begin
  result:=_else(AOwner,txt);
  break;
  end;
 oldcenter:=center;
 cr:=strcomp(pchar(mcall[center].cond),pchar(v));
 if cr=0 then
  begin
  result:=mcall[center].func(AOwner,txt);
  break;
  end else if cr<0 then min:=center else max:=center;
 end;
end;



procedure TForm1.FormCreate(Sender: TObject);
var i,j,min:integer;
    tmp:tcall;
begin
 setlength(mcall,4);
 mcall[0].cond:='label';
 mcall[0].func:=_label;
 mcall[1].cond:='button';
 mcall[1].func:=_button;
 mcall[2].cond:='edit';
 mcall[2].func:=_edit;
 mcall[3].cond:='panel';
 mcall[3].func:=_panel;

for i:=0 to length(mcall)-2  do
 begin
 min:=i;
 for j:=i+1 to length(mcall)-1  do
  if 0<StrComp(pchar(mcall[min].cond),pchar(mcall[j].cond)) then min:=j;
 if min<>i then
   begin
   tmp:=mcall[min];
   mcall[min]:=mcall[i];
   mcall[i]:=tmp;
   end;
 end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var cmp:tcontrol;
begin
   cmp:=call(edit1.Text,form1,'Ïðóâåò');
   if cmp<>nil then
    begin
    cmp.Visible:=true;
    form1.InsertControl(cmp);
    end;
end;




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0385 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.