Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.04.2015, 10:15
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Доброго времени суток!
Возникла необходимость работать с эдитами в unit2 (или как там его назвать) но столкнулся с проблемой, при использовании FindComponent...
Если я обращаюсь напрямую, напр.:
Код:
MainForm.Edit1.text := '';  //MainForm:TMainForm;
То все гуд.
Но если мне, напр. нужно очистить все edit
Код:
 for j:=1 to 14 do begin
  MainForm.FindComponent(('Edit' + IntToStr(j)) as TEdit).text := '';
 end;

То уже говорит что "TEdit необъявленный идентификатор"
Как класс TEdit сделать доступным для unit2?
Спасибо.

И да....
Пробовал сделать так:
Код:
type
TmyEdit  = class(TEdit)
то же самое...

Последний раз редактировалось M.A.D.M.A.N., 09.04.2015 в 13:14.
Ответить с цитированием
  #2  
Старый 09.04.2015, 11:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

добавить в uses StdCtrls
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
avis_rara (09.04.2015)
  #3  
Старый 09.04.2015, 11:37
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

спасибо это помогло, но теперь пишет что "operator not applicable to this operand type" (оператор, не применимый к этому типу операнда).
Это про строку :
Код:
MainForm.FindComponent(('Edit' + IntToStr(j)) as TEdit)).text := '';
Как правильно записать это действие?
У unit1(main) я пишу
Код:
(FindComponent('Edit' + IntToStr(j)) as TEdit).text := '';
и работает
а в unit2
пытался
Код:
TMainForm(FindComponent('Edit' + IntToStr(j)) as TEdit).text := '';

то же самое...
а просто
Код:
MainForm.Edit1.text :='';
MainForm.Edit2.text :='';
//и т.п. работает
Помогите плз. Спасибо
Ответить с цитированием
  #4  
Старый 09.04.2015, 11:47
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
TEdit(Form1.FindComponent('Edit'+IntToStr(1))).Text:='Ok';
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
avis_rara (09.04.2015)
  #5  
Старый 09.04.2015, 11:49
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Код:
TEdit(Form1.FindComponent('Edit'+IntToStr(1))).Text:='Ok';

ОГРОМНОЕ спасибо!

Цитата:
Сообщение от NumLock
добавить в uses StdCtrls
А вот ещё к Вам вопрос. Я проверил это работает с "эдитами" и "лейблами" а вот с трекбаром уже не канает... есть ли ещё какие-то перехватчики класов?
Спасибо.

Понял, туплю... нужно добавить ComCtrls=)


Продолжаю я свою оптимизацию кода...
У меня на GroupBox, есть порядка 20-ти элементов shape. Они у меня по задумке должны играть роль кнопок. Но не хотелось бы создавать на каждый из них обработчик
Код:
procedure TMainForm.Shape20MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
А сделать один обработчик для GroupBox
Код:
procedure TMainForm.GroupBox1Click(Sender: TObject)

Как при этом можно отследить на какой из шейпов было нажато? Все элементы Shape созданы вручную, а не программно...
Код:
procedure TMainForm.GroupBox1Click(Sender: TObject)
var
j:byte;
begin
  for j:=1 to 20 do begin
    //проверяем все по очереди не он ли нажат
    //если "shape(j)" нажат то изменяем какую-то переменную из массива x[j]:=1;
  end;
end;


Спасибо. Не судите строго, я только учусь....

Последний раз редактировалось avis_rara, 09.04.2015 в 16:19.
Ответить с цитированием
  #6  
Старый 09.04.2015, 17:25
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У вас ведь есть уже такой замечательный помощник в энтом деле как Sender, т.е. тот - кто сработал, в данном случае вам остаётся напр. задать свойство Tag у ваших "кнопарей" по-порядку, в смысле shape1.tag = 1.. shape20.tag = 20 в обжект инспекторе, а дальше прописать в единственном обработчике клика такое
Код:
x[(Sender as TShape).Tag]:=1;
и всё, конечно, при условии, что вы зададите этот обработчик для всех остальных "нажималок"
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
avis_rara (09.04.2015)
  #7  
Старый 09.04.2015, 17:59
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо!!!
Ответить с цитированием
  #8  
Старый 10.04.2015, 09:59
avis_rara avis_rara вне форума
Прохожий
 
Регистрация: 01.07.2014
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Что-то не получается... не могу понять где я не въехал...
Для всех shape в Object Inspector - е установил tag от 1 до 20ти.
Код:
procedure TMainForm.GroupBox1Click(Sender: TObject);
begin
 if  (Sender as TShape).Tag = 1 then
//если попали на первый то меняем его цвет...
 TShape(FindComponent('Shape'+IntToStr(1))).Brush.Color := clLime;
end;
END.

И самое интересное, что когда нажимаю на любой из шейпов то реакции нет, а когда мимо них то программа выбивает ошибку....



А если изменить на то что просто нужно нажать на GroupBox (у него tag=0)
Код:
procedure TMainForm.GroupBox1Click(Sender: TObject);
begin
 if  (Sender as TGroupBox).Tag = 0 then
 TShape(FindComponent('Shape'+IntToStr(1))).Brush.Color := clLime;
end;
END.
то работает, как-то так....
По сути при нажатии на шейп я не попадаю в процедуру GroupBox1Click.

Разобрался=) в Events каждого шейпа поставил обработчик GroupBox11MouseDown

Последний раз редактировалось avis_rara, 10.04.2015 в 10:43.
Ответить с цитированием
  #9  
Старый 10.04.2015, 18:12
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вообще-то я вот такой пример подразумевал, извнт, раз с первого заходу не смог объяснить толково
Вложения
Тип файла: zip avis_rara.zip (2.0 Кбайт, 0 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter