Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать подобную PHP конструкцию в Delphi? 
:(
    Опции темы
skeef
Дата 6.3.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



Пришел в Delphi из PHP и сейчас активно осваиваю его (Delphi). Столкнулся с такой проблемой: на форме расположено 20 ComboBox`ов и столько же полей Edit. Все это соответствует столбцам некоего Excel файла. Имена cbA, cbB ... cbT и edA ... edT соответсвенно.

В PHP код был бы прост до безобразия:

Код

$arLet = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', ); 
$arlen = count($arLet);
for $i = 0 to $arlen {
 $cb = 'cb'.$arLet[$i];
 $ed = 'ed'.$arLet[$i];
 $$cb.ItemIndex = ...
 $$ed.Text = ...
}


Не совсем верно с точки зрения синтаксиса, но идея, думаю, понятна. 
Здесь я использую возможность языка PHP работать с переменными переменными, т.е. (для тех кто не знает) динамически в цикле создаю имя переменной.

В Делфи такой возможности, как я понял перерыв инет, просто нет, поэтому код из 10 строк на PHP превращается в сотню строк на Delphi. 
Скорее всего я иду не в ту сторону. Подскажите, подтолкните, дайте ссылку. 
Заранее благодарен за дельные советы
PM MAIL   Вверх
Regulum
Дата 6.3.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.6.2009

Репутация: нет
Всего: 1



А что если заранее закинуть ссылки на компоненты в массив (например в обработчике OnShow Вашей формы)
Код

var //объявляем глобально массивы
     Combos: array [1..20] of TComboBox;
     Edits: array [1..20] of TEdit;

........
procedure TForm1.FormShow(Sender: TObject);
begin
    Combos[1]:= ComboBox1;
    Combos[2]:= ComboBox2;
     ......
    Combos[20]:= ComboBox20;
    Edits[1]:= Edit1;
    ........
    Edits[20]:= Edit1;
end;


а потом можно также в цикле использовать, только не с буквенными индексами, а с числовыми

Код

for i=1 to 20
begin
     Combos[i].ItemIndex:=....;
     Edits[i].Text:= ...;
end

PM MAIL   Вверх
Matematik
Дата 6.3.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 7
Всего: 50



Грубо, без проверок правильности заполнения
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  CbCount = 3;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    btn1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    FEditList: array[1..CbCount] of TEdit;
    FCBoxList: array[1..CbCount] of TComboBox;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var j: Integer;
begin
  for j:=1 to CbCount do
  begin
    FCBoxList[j].ItemIndex := FCBoxList[j].Items.Add(FEditList[j].Text);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var j: Integer;
begin
  for j:=1 to CbCount do
  begin
    FEditList[j] := FindComponent('Edit'+IntToStr(j)) as TEdit;
    FCBoxList[j] := FindComponent('ComboBox'+IntToStr(j)) as TComboBox;
  end;
end;

end.


PM MAIL WWW ICQ   Вверх
samsamich
Дата 6.3.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



Цитата(Regulum @  6.3.2010,  11:00 Найти цитируемый пост)
объявляем глобально массивы
глобально не есть хорошо. лучше эти массивы сделать членами класса формы.
PM MAIL   Вверх
Regulum
Дата 6.3.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.6.2009

Репутация: нет
Всего: 1



Именно это и имел ввиду, просто не так выразился. Хотел сказать, что объявлять не внутри процедуры, откуда будет вызов
PM MAIL   Вверх
skeef
Дата 6.3.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



Благодарю за оперативность! Обязательно возьму на вооружение

Цитата(samsamich @ 6.3.2010,  11:10)
Цитата(Regulum @  6.3.2010,  11:00 Найти цитируемый пост)
объявляем глобально массивы
глобально не есть хорошо. лучше эти массивы сделать членами класса формы.

Ну этому меня еще РНР научил smile

Всем огромное спасибо
PM MAIL   Вверх
k0rvin
Дата 9.3.2010, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(skeef @ 6.3.2010,  10:43)
Не совсем верно с точки зрения синтаксиса, но идея, думаю, понятна. 
Здесь я использую возможность языка PHP работать с переменными переменными, т.е. (для тех кто не знает) динамически в цикле создаю имя переменной.

В Делфи такой возможности, как я понял перерыв инет, просто нет, поэтому код из 10 строк на PHP превращается в сотню строк на Delphi. 
Скорее всего я иду не в ту сторону.

не в ту, генерация имен переменных/функций -- плохая практика. храни данные в массиве/списке/хеш-таблице


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.