Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Sender... кто же вызвал процедуру?...   Найти похожие ветки 

 
chir   (2005-01-12 18:47) [0]

Хочу сделать такую процедуру:

procedure TForm1.MyControl(Sender: TObject);
begin
 RichEdit1.Lines.Add(TControl(Sender).Name+": MyControl");

 case TControl(Sender).Name of
   "cxDBTL_FIO": ;
   "ToolButton1": ;
   "ToolButton2": ;
   "ToolButton3": ;
   "ToolButton5": ;
 end;
end;

Но компилятор ругается... не нравится ему TControl(Sender).Name в case. "Ordinal type required"

Как мне преобразовать к нужному типу?


 
begin...end ©   (2005-01-12 18:50) [1]

> chir   (12.01.05 18:47)

Заменяйте на if"ы.


 
jack128 ©   (2005-01-12 18:50) [2]

if TControl(Sender).Name = "cxDBTL_FIO" then
else if TControl(Sender).Name = "ToolButton1" then
else if TControl(Sender).Name = "ToolButton2" then
else if TControl(Sender).Name = "ToolButton3" then
else if TControl(Sender).Name = "ToolButton5" then


 
Александр Иванов ©   (2005-01-12 18:50) [3]

Вопрос в чем в том как сделать работающий case? Или как преобразовать тип? Или как сделать один обработчик на разные компоненты?
Насколько я понял - последне. Тогда лучше использовать Tag.


 
Walker ©   (2005-01-12 18:52) [4]

структура case X of ... end работает только с целочисленным типом, т.е. X: Integer; а у тебя TControl(Sender).Name - тип String

выход в данной ситуации может быть таким:

procedure TForm1.MyControl(Sender: TObject);
var
 s: String;
begin
RichEdit1.Lines.Add(TControl(Sender).Name+": MyControl");

s := TControl(Sender).Name;

if s = "cxDBTL_FIO" then ... else
if s = "ToolButton1" then ... else
if s = "ToolButton1" then ... else
if s = "ToolButton2" then ... else

 и так далее

end;


 
icWasya ©   (2005-01-12 18:54) [5]

увы, строки в Case не поддерживаются. Поэтому либо
procedure TForm1.MyControl(Sender: TObject);
var
 S:String;
begin
RichEdit1.Lines.Add(TControl(Sender).Name+": MyControl");

S:= TControl(Sender).Name
if S="cxDBTL_FIO" then ;
if S="ToolButton1" then ;
if S="ToolButton2" then ;
if S="ToolButton3" then ;
if S="ToolButton5" then ;

end;

,
Либо чуть-чуть доработать, например установив свойство Tag у компонент и

procedure TForm1.MyControl(Sender: TObject);
begin
RichEdit1.Lines.Add(TControl(Sender).Name+": MyControl(" +IntToStr(TControl(Sender).Tag+")" );

case TControl(Sender).Tag of
  1: ;
  2: ;
  3: ;
  4: ;
  5: ;
end;
end;


 
chir   (2005-01-12 18:56) [6]

такс... пасибочки

Про case понял. спасибо. После php тяжело вспоминать Pascal. Хотя в Pascal"е case брал char... про String не помню.

> Александр Иванов
Вот наверное мне нужен Tag...
Этот Tag долго осваивать? что это вообще?


 
jack128 ©   (2005-01-12 18:57) [7]

chir   (12.01.05 18:56) [6]
Хотя в Pascal"е case брал char

и в дельфи берет.  кейс принимает все ПЕРЕЧИСЛЯЕМЫЕ типы.


 
chir   (2005-01-12 18:57) [8]

> icWasya
про Tag вроде тоже понял.
ща попробую, спасибо


 
XmeD   (2005-01-12 19:00) [9]


Вот наверное мне нужен Tag...
Этот Tag долго осваивать? что это вообще?


Tag - integer - целочисленное проперти любого компонента в Делфи.
По дефолту 0, а вообще используется в основном именно для таких случаев


 
jack128 ©   (2005-01-12 19:17) [10]

2chir, icWasya, XmeD

Квалификацию Дельфи программиста можно опеределить как раз по тому как он решает сабжеваю задачу.
Сначала люди пишут

if TControl(Sender).Name = "cxDBTL_FIO" then
else if TControl(Sender).Name = "ToolButton1" then
else if TControl(Sender).Name = "ToolButton2" then
else if TControl(Sender).Name = "ToolButton3" then
else if TControl(Sender).Name = "ToolButton5" then


Потехоньку люди узнают про свойство таг и пишут что - то типа

case TControl(Sender).Tag of
 1: ;
 2: ;
 3: ;
 4: ;
 5: ;
end;


Ну и наконец приходит понимание, что нефига городить огород, там где он не нужен ;-) и получается такой код:

if Sender = cxDBTL_FIO then
else if Sender = ToolButton1 then
else if Sender = ToolButton2 then
else if Sender = ToolButton3 then
else if Sender = ToolButton5 then


:-)



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

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1105256503
kaZaNoVa
2005-01-09 10:41
2005.01.23
TThread, Потоки, пример использования


14-1104708953
Кудесник
2005-01-03 02:35
2005.01.23
Onimusha 3... что это?


1-1104743119
TeNY
2005-01-03 12:05
2005.01.23
Полезная програ для работы в Delhpi Easy Bufer v1.01


14-1104806610
Думкин
2005-01-04 05:43
2005.01.23
С днем рождения! 4 января


1-1105522667
hgd
2005-01-12 12:37
2005.01.23
Вопрос про отчеты