Главная страница
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.025 c
3-1103578656
_Dragon
2004-12-21 00:37
2005.01.23
обработка SQL запроса в BDE


4-1101823960
Донской
2004-11-30 17:12
2005.01.23
broadcastsystemmessage и сервисы


1-1104913176
Sanich
2005-01-05 11:19
2005.01.23
Как сделать чтоб в TDBGridEh выбиралось значние для TDBGridEh


3-1103548130
cherrex
2004-12-20 16:08
2005.01.23
компоненты Delphi для работы с Oracle


14-1104996506
syte_ser78
2005-01-06 10:28
2005.01.23
блин. Вопрос по ShellListView