Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Имя контрола на форме в переменной / 25 сообщений из 29, страница 1 из 2
23.05.2018, 19:07
    #39648952
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Господа, здравствуйте.

Сам по Access.
Волею судеб ))) попал в Delphi.

В аксе я мог обратиться к контролу по имени, из переменной:
Код: vbnet
1.
Forms!Form1(strNameField) = 0 


пробовал
в цикле
Код: pascal
1.
Form1('Edit' + IntToStr(i)).Text := IntToStr(IdValue[i]);


не прокатывает
кроме способа перебора контролов, ничего не нашел здесь.

Может подскажете?
...
Рейтинг: 0 / 0
23.05.2018, 19:13
    #39648956
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
23.05.2018 19:07, Игортан пишет:
> кроме способа перебора контролов, ничего не нашел здесь.
> Может подскажете?

кроме перебора способа нет.
можно конечно по хэндлу, но тебе это вряд ли подойдёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.05.2018, 19:17
    #39648958
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Мимопроходящий,

Спасибо за быстрый ответ.
Жаль конечно.
Да, по хендлу, его все равно знать нужно...
А городить, на 5 контролов перебора, огород не хочется.
...
Рейтинг: 0 / 0
23.05.2018, 19:18
    #39648959
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
23.05.2018 19:17, Игортан пишет:
> А городить, на 5 контролов перебора, огород не хочется.

функция в одну строчку кода
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.05.2018, 19:21
    #39648960
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Мимопроходящий,

Скиньте, пожалуйста на посмотреть
...
Рейтинг: 0 / 0
23.05.2018, 19:29
    #39648966
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
ИгортанСкиньте, пожалуйста на посмотреть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  function FindControl(ControlName: string): TControl;
  var
    i: integer;
  begin
    Result := nil;
    for i := 0 to ControlCount - 1 do
      if AnsiSameText(ControlName, Controls[i].Name) then
        begin
          Result := Controls[1];
          Break;
        end;
  end;
...
Рейтинг: 0 / 0
23.05.2018, 19:58
    #39648985
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Мимопроходящий,

Спасибо за пример!
В общем, уж взялся, сделал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  for j :=1 to 5 do
  begin
    ControlName := 'Edit' + IntToStr(j);
    for i := 0 to ControlCount - 1 do
      if AnsiSameText(ControlName, Controls[i].Name) then
        begin
          Controls[i].SetTextBuf(PChar(IdValue[i]));
          Break;
        end;
  end;
...
Рейтинг: 0 / 0
23.05.2018, 20:04
    #39648989
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Игортан,

А нет, бьет ошибку на присваивание текста...
что то ничего ближе присваивания значения эдиту не нашел.
...
Рейтинг: 0 / 0
23.05.2018, 20:55
    #39649011
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
А чо, FindComponent отменили ?
...
Рейтинг: 0 / 0
23.05.2018, 23:54
    #39649065
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Мимопроходящий
Код: pascal
1.
Result := Controls[1];

От же ж смешно
...
Рейтинг: 0 / 0
23.05.2018, 23:59
    #39649068
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
ИгортанИгортан,

А нет, бьет ошибку на присваивание текста...
что то ничего ближе присваивания значения эдиту не нашел.
Код: pascal
1.
Controls[i].SetTextBuf(PChar(IdValue[i]));


Код: pascal
1.
2.
if Controls[i] is TEdit then
  ( Controls[i] as TEdit ).Text := IdValue[i];
...
Рейтинг: 0 / 0
24.05.2018, 09:52
    #39649183
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
23.05.2018 23:54, YuRock пишет:
> От же ж смешно

не пали контору.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2018, 13:03
    #39649368
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Господа, Мимопроходящий, YuRock.
Спасибо, потренировался)))
Про приведение типа даже не подумал сразу...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  for j :=1 to 5 do
    for i := 0 to ControlCount - 1 do
      if AnsiSameText('Edit' + IntToStr(j), Controls[i].Name) then
      begin
        (Controls[i] as TEdit).Text := IntToStr(IdValue[j-1]);
        Break;
      end;



Получилось не короче ))), но...
не догнал, так хоть согрелся)))
...
Рейтинг: 0 / 0
24.05.2018, 14:23
    #39649445
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Игортан,

Повторюсь: FindComponent.
...
Рейтинг: 0 / 0
24.05.2018, 14:50
    #39649459
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
ИгортанПро приведение типа даже не подумал сразу...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  for j :=1 to 5 do
    for i := 0 to ControlCount - 1 do
      if AnsiSameText('Edit' + IntToStr(j), Controls[i].Name) then
      begin
        (Controls[i] as TEdit).Text := IntToStr(IdValue[j-1]);
        Break;
      end;


Получилось не короче ))), но...
не догнал, так хоть согрелся)))

Угу, грабельки ты себе аккуратно разложил, не спорю :) Положи на форму TPanel и назови ее Edit1. Удивишься :)
Не нужно тупо приведение типов делать в общем случае - нужно IS использовать:

Код: pascal
1.
   if (Controls[i] is TEdit) then TEdit(Controls[i]).Text:='.....';
...
Рейтинг: 0 / 0
24.05.2018, 15:18
    #39649485
Здравый
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
самый здравый смысл тут, создать список нужныъ edit-ов, явно все не нужны будут
...
Рейтинг: 0 / 0
24.05.2018, 15:22
    #39649487
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
DarkMaster,

Да, да.
Я проблему имени контрола и его типа понимаю.
И проверку типа контрола нужно делать в более серьезных приложениях)))
Это учебный код))))
Там проще было написать 5 строчек повторяющегося кода для 5 контролов.
Да как то совесть не позволяет писать такого уровня код.
И городить вместо 5 строк, десяток не хотелось....
Хотя, конечно, раз назвался груздем...нужно проверку вставить.
Спасибо за наставление.
...
Рейтинг: 0 / 0
24.05.2018, 15:29
    #39649492
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Игортан,

Если писать процедуру/функцию - очевидно нужно подумать о ее универсальном использовании. 5 лишних срочек и 15 минут сегодня реально сэкономят 100500 часов завтра :)
...
Рейтинг: 0 / 0
24.05.2018, 18:52
    #39649556
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Я скорее склоняюсь к тому, что такой стиль программирования даже в Access-е зло, не говоря уже о Delphi.
Задавать свойства контролов лучше по ООП-шному - через свойства (property) формы, а уже как данные на форме представленны (через текстовый редактор или комбобокс) это вопрос десятый.
...
Рейтинг: 0 / 0
24.05.2018, 21:39
    #39649596
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Dimonka,

Для внесения данных из массива в определенные едиты тоже нужно делать циклом.
Форма - Контролы - проверка типа/имени(если есть имена) - присваивание.
Но по имени, конечно, существует условность - что контролы с именами соответствуют задуманному смыслу.
Я делал там или по префиксу или по постфиксу,
или "договоренность" заливки данных из рекордсета
что имена полей формы и рекордсета совпадают.

Мы же все равно не стреляем в небо.
Нам нужно присвоить контролу значение, кроме имени (идентификатор не в счет) уникальности не будет.
Потому и ищем по имени, а перед вставкой уже нужна(ли) проверка типа контрола.
Ли - потому что контрол заранее известен или подразумевается его соответствие.

Хотя, если вы мне покажете другой способ буду очень признателен.
Возможно это я недоросший)))
...
Рейтинг: 0 / 0
25.05.2018, 00:46
    #39649626
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Игортанили "договоренность" заливки данных из рекордсета
что имена полей формы и рекордсета совпадают.
Для этого придумали DB контролы и имена не имеют вообще никакого значения
...
Рейтинг: 0 / 0
25.05.2018, 00:56
    #39649628
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Игортан,

просто интересно, а зачем вам это? Какую вы задачу решаете с помощью поиска контрола по имени?
...
Рейтинг: 0 / 0
25.05.2018, 00:57
    #39649629
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
А пардон, 2-умя постами выше нашел
...
Рейтинг: 0 / 0
25.05.2018, 01:16
    #39649631
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
Кроик Семён,

Да тут больше узнать более адекватный метод работы.
А то может это только я думаю, что я что то умею/знаю))) а на самом деле велосипеды изобретаю, как минимум)))
DimaBrДля этого придумали DB контролы и имена не имеют вообще никакого значения
Это вы в Delphi имеете ввиду DBGrid?
Да в общем и в Access я уже эволюционно перехожу на работу в стиле ООП, на сколько позволяет Access.
DimonkaЗадавать свойства контролов лучше по ООП-шному - через свойства (property) формы, а уже как данные на форме представленны (через текстовый редактор или комбобокс) это вопрос десятый.
Это не совсем понял.
Я так понимаю, речь о чем то универсальном и переносимом.
Можно пример?
...
Рейтинг: 0 / 0
25.05.2018, 10:32
    #39649725
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя контрола на форме в переменной
ИгортанDimaBrДля этого придумали DB контролы и имена не имеют вообще никакого значенияЭто вы в Delphi имеете ввиду DBGrid?DBGrid, DBEdit, DB(Lookup)ComboBox, DBLabel. Если поискать, то DBDatetimePicker
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Имя контрола на форме в переменной / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]