Форум: "Основная";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
ВнизПеременные и TEdit Найти похожие ветки
← →
Lt (2004-01-05 09:00) [0]Добрый день.
На форме есть десятки TEdit-ов. Каждому из них соответствует своя переменная, например, TEdit-у "edtPart1" соответствует переменная "Part1", "edtPart2" соответствует переменная "Part2" и т.д. Нужно: присвоить всем переменным значения текстовых полей TEdit-ов. Работать последовательно с каждой переменной и каждым TEdit-ом не хочется - слишком громоздко. Есть ли способ это сделать в цикле?
← →
alex_*** (2004-01-05 09:03) [1]comp := FindComponent("edtPart"+IntToSTr(i+1));
← →
Романов Р.В. (2004-01-05 09:07) [2]
> alex_*** © (05.01.04 09:03) [1]
+ массив вместо переменных
← →
asp (2004-01-05 09:08) [3]for i:= 0 to Form1.ControlCount - 1 do
if Form1.Controls[i] is TEdit then
begin
{ ... }
end
← →
Zergling (2004-01-05 09:11) [4]tag компонента это порядковый номер элемента массива
Var
I: Integer;
S: array [0..3] of string;
begin
for I := 0 to Form1.ComponentCount - 1 do
if Form1.Components[I] is TEdit then S[Components[I].Tag] := TEdit(Components[I]).Text;
end;
← →
ALEIIIKA (2004-01-05 09:43) [5][2]
+ массив вместо переменных
Edit : Array [0..9] of TEdit;
и далее создаешь и юзаешь!
← →
Zergling (2004-01-05 09:49) [6]ALEIIIKA © (05.01.04 09:43) [5]
Ню, если памяти нежалко, то...
← →
Романов Р.В. (2004-01-05 10:14) [7]
> Ню, если памяти нежалко, то...
40 байт не жалко, но для чего этот массив - непонятно???
← →
Lt (2004-01-05 13:33) [8]А если без массива переменных? Уж больно хочется оставить "говорящие" переменные.
← →
Sandman25 (2004-01-05 13:38) [9]edtPart1 - более говорящяя, чем edtPart[1]? :)
← →
Sandman25 (2004-01-05 13:38) [10]говорящ ая
позор на мои седины :)
← →
Lt (2004-01-05 13:39) [11]Говорящая ПЕРЕМЕННАЯ мне нужна, а не имя TEdit"а
← →
Sandman25 (2004-01-05 13:41) [12]edtPart[1] - переменная типа string
А в цикле edtPart[i] := TEdit(FindComponent("Edit"+IntToStr(i))).Text
← →
alex_*** (2004-01-05 13:42) [13]что за "говорящие перменные"?
нужно как-то закрепить переменную за Edit"ом. в Массиве это делает индекс. Не хочешь массив,заведи свой список записей типа
TRec = record
Value: String
Comp: TEdit;
end;
и бегай по нему
← →
Lt (2004-01-05 13:45) [14]Уточняю. Переменные могут быть не только "Part1", "Part2", но и "my_first", "segment583", "stones" и т.д. Вот к ним я и привязываю TEdit"ы. В принципе, если от таких имен переменных отказаться, то меня полностью бы устроил совет Zergling-а. Но хочется уж больно гладко...
← →
Lt (2004-01-05 13:47) [15]
> alex_***
Во, это уже ближе к телу... Про записи-то я забыл.
← →
Sandman25 (2004-01-05 13:49) [16][15] Lt (05.01.04 13:47)
Можно вообще TStringList завести, и использовать Objects и IndexOf
← →
Sandman25 (2004-01-05 13:50) [17][14] Lt (05.01.04 13:45)
Кстати, такие "уточнения" нужно в первом посте писать
← →
Романов Р.В. (2004-01-05 13:50) [18]const
Part1 = 1;
Part2 = 2;
...
stones = 8;
...
edtPart[stones] :=
← →
Lt (2004-01-05 13:52) [19]
> Кстати, такие "уточнения" нужно в первом посте писать
Прошу прощения, торопился
← →
alex_*** (2004-01-05 14:00) [20]за "гладкость" придется платить кодом. Заводить свой тип записей, массив этих записей, заполнять его и т.д ... (как вариант).
← →
Zergling (2004-01-05 14:01) [21]var
I: Integer;
ss, my1, my2: string;
begin
for I := 0 to Form1.ComponentCount - 1 do
if Form1.Components[I] is TEdit then
begin
ss := TEdit(Form1.Components[I]).Text;
case TEdit(Form1.Components[I]).Tag of
0: My1 := SS;
1: My2 := SS;
end;
end;
end;
← →
Lt (2004-01-05 15:55) [22]Так это то же самое, что
var
my1, my2: string;
begin
My1 := edtMy1.Text;
My1 := edtMy1.Text;
...
end;
Идет то же перечисление переменных. Вот если в без него...
← →
Lt (2004-01-05 16:00) [23]Идея была в другом: переменная - "My452", TEdit - "edtMy452". Ищем на форме TEdit, по его имени находим переменную, и ей присваиваем значение TEdit.Text. Только вот как это сделать?...
Вся загвоздка в том, чтобы по имени TEdit найти соответстывующую ему переменную.
← →
alex_*** (2004-01-05 16:09) [24]вот маньяк - искать переменные по имени.
Так жить нельзя.
Придется выбрать один из выше перечисленных способов и ручками дорабатывать.
← →
Lt (2004-01-05 16:11) [25]наверное... А за маньяка спасибо большое.
← →
Плохиш_ (2004-01-05 16:19) [26]>Lt (05.01.04 16:00) [23]
У переменных нет имён.
← →
Lt (2004-01-05 16:23) [27]Ну, началось... Короче, можно по значению одной переменной создать другую переменную или нет?
← →
alex_*** (2004-01-05 16:29) [28]ну нельзя..
сколько памяти под переменные отводить определяет компиллятор. И имен у переменных нет. Только адреса.
← →
Плохиш_ (2004-01-05 16:30) [29]
> Lt (05.01.04 16:23) [27]
> Ну, началось... Короче, можно по значению одной переменной
> создать другую переменную или нет?
А теперь по-медленнее и по-русски ешё раз.
← →
yo (2004-01-05 17:07) [30]Есть такой вариант:
// Определяет абстрактную связь между контролом и переменной
ILink = interface
["{00C099E0-3F9C-11D8-9F00-0050BAF21D9F}"]
procedure Control2Var; // Запись значения контрола в переменную
procedure Var2Control; // Запись переменной в контрол
end;
// Интерфейс используется только для того, чтобы не беспокоиться
// о уничтожении объектов. Можно вместо этого использовать
// абстракный объект
// Описывает конкретную связь между переменной целого типа и Эдитом
TEditIntegerLink = class(TInterfacedObject, ILink)
private
FEdit: TEdit;
FVarAddr: PInteger;
public
constructor Create(AEdit: TEdit; var AVar: Integer);
//begin
// if not Assigned(AEdit) then raise Exception.Create("Bad link");
// FEdit := AEdit;
// FVarAddr := @AVar;
//end;
procedure Control2Var;
//begin
// FVarAddr^ := StrToInt(FEdit.Text);
//end;
procedure Var2Control;
//begin
// FEdit.Text := IntToStr(FVarAddr^);
//end;
end;
var
Links: TInterfaceList; // array of ILink;
procedure RegisterAllLinks;
begin
// Регистрируем все связи
Links.Add( TEditIntegerLink.Create(edtPart1, Part1) );
Links.Add( TEditIntegerLink.Create(edtPart2, Part2) );
...
end;
// Записываем текст эдитов в переменные в цикле
for i := 0 to Length(LinkArray)-1 do
(Links[i] as ILink).Control2Var;
← →
alex_*** (2004-01-05 17:23) [31]вот. не хотел с массивами заморачиваться, теперь есть возможность через интерфейсы сделать ))
← →
yo (2004-01-05 17:36) [32]>alex_*** © (05.01.04 17:23) [31]
Чем проще вещь выглядит снаружи,
тем замороченней она обычно внутри :)
← →
alex_*** (2004-01-05 17:55) [33]ну не факт... в глобальном смысле ))
Только для человека, который хочет искать переменные по имени, грузить интерфейсами как-то слишком садистки )).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.013 c