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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 02:16   #1
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
Вопрос Приведение TComponentName к String

Хотел сделать нечто подобное

Код:
procedure TForm1.LoadZakExecute(Sender: TObject);
var S:String;
begin
S:=(Sender as TMenuItem).Name; // <- Здесь не работает
Delete(S,0,3);
ComboBox1.Text:=ListZak[StrToInt(S)];
BeginLoad.Execute;
end;
Не получилось. Очень нужно извлечь имя вызывающего данное событие меню TMenuItem, которые создавались динамически и все ссылались на этот обработчик. Как быть?

Последний раз редактировалось cherw9!40k; 07.12.2009 в 11:44. Причина: Пометка
cherw9!40k вне форума Ответить с цитированием
Старый 07.12.2009, 02:43   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код нужно оформлять по правилам!

Что это за процедура? Каким образом она вызывается?
Если вы ее вызываете по клику на итемсе меню, то и передавайте в нее в качестве параметра сендер из обработчика клика.

Последний раз редактировалось mihali4; 07.12.2009 в 02:49.
mihali4 вне форума Ответить с цитированием
Старый 07.12.2009, 11:50   #3
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
По умолчанию

Цитата:
Что это за процедура?
Считывает имя вызывающего меню. Удаляет первые три символа в строковой переменной, куда считалось. Таким образом остается только номер. Примеры имен: Zak1, Zak2,..., Zak15.
Цитата:
Если вы ее вызываете по клику на итемсе меню
Да
Цитата:
то и передавайте в нее в качестве параметра сендер из обработчика клика.
А я разве не так сделал?

Мне надо значение параметра Name передать в строковую переменную.
cherw9!40k вне форума Ответить с цитированием
Старый 07.12.2009, 12:30   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Может Вы это имели ввиду
Код:
TMenuItem(Sender).Caption
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 07.12.2009, 13:12   #5
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
Может Вы это имели ввиду
Код:
TMenuItem(Sender).Caption
Там Caption другую информацию содержит. Мне Name нужно.
cherw9!40k вне форума Ответить с цитированием
Старый 07.12.2009, 13:20   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Попробуйте вместо
Код:
S:=(Sender as TMenuItem).Name;
использовать
Код:
S:=(Sender as TObject).Name;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 07.12.2009, 13:32   #7
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
По умолчанию

Цитата:
использовать
Код:


S:=(Sender as TObject).Name;
Так, вообще, нельзя - он выдает ошибку при компиляции.
cherw9!40k вне форума Ответить с цитированием
Старый 07.12.2009, 13:36   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Загнался .
Вот пример из Дельфи:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var

  I: Integer;
begin
  for I := 0 to Form1.ComponentCount-1 do
    ListBox1.Items.InsertObject(0, Form1.Components[I].Name, 
                                Form1.Components[I] as TObject);
end;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 07.12.2009, 14:41   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Цитата:
то и передавайте в нее в качестве параметра сендер из обработчика клика.
А я разве не так сделал?
Видимо, не так...
Код:
procedure TForm1.N2Click(Sender: TObject);
begin
MyProc(Sender);
end;

procedure TForm1.MyProc(Sender: TObject);
begin
Label1.Caption:=(Sender as TMenuItem).Name;
end;

Последний раз редактировалось mihali4; 07.12.2009 в 14:44.
mihali4 вне форума Ответить с цитированием
Старый 07.12.2009, 15:10   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) в строке символы считаются от единицы, поэтому:
Код:
Delete(s,1,4);
2) прежде, чем делать StrToInt я бы проверил, что в строке остались именно циферки.. (это можно сделать кучей способов, как через банальный VAL(), так и через try .. except ...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
String fdbdfbfd Общие вопросы C/C++ 0 24.11.2009 23:14
Приведение процедурных типов в перегруженных методах AndreyCo Общие вопросы Delphi 8 10.11.2009 19:20
string BLADEE Помощь студентам 4 29.10.2009 16:29
Приведение к типу __Demon__ Общие вопросы C/C++ 1 27.09.2009 17:40
Приведение задачи к каноническому виду feniks65 Паскаль, Turbo Pascal, PascalABC.NET 2 26.12.2008 22:53