Форум: "Начинающим";
Текущий архив: 2014.08.03;
Скачать: [xml.tar.bz2];
Внизполучить по имени переменной ее значение Найти похожие ветки
← →
Вася (2013-09-19 13:08) [0]Возможно ли сделать такое:
procedure set_all;
const
controlsvalue: array[1..5,1..2] of string = (("Edit1","vall1"),("Edit1","vall2"),("Edit1","kll"),("Edit1","re"),("Edit1","io n"));
var
i, vall1, vall2, kll, re, ion: integer;
begin
for i:=0 to length(controlsvalue) do TEdit(FindComponent(controlsvalue[i,0])).Text:=IntToStr(controlsvalue[i,1]);
end;
проблема в выраженииIntToStr(controlsvalue[i,1]);
не знаю как по имени переменной вытянуть ее значение
← →
[ВладОшин] © (2013-09-19 13:13) [1]зачем IntToStr
просто controlsvalue[i,1]
← →
Вася (2013-09-19 13:15) [2]а, да, не проверял, просто в браузере писал :)
← →
[ВладОшин] © (2013-09-19 13:29) [3]ну, все верно, в принципе
только с индексами разберись
> controlsvalue: array[1
>for i:=0
controlsvalue[i,
← →
Inovet © (2013-09-19 13:29) [4]Заполни массив вместо имён переменных указателями на эти переменные.
← →
Вася (2013-09-19 14:53) [5]сделал так
type
setingi=record
n:string[20];
v:pointer;
end;
var
i, vall1, vall2, kll, re, ion: integer;
controlsvalue: array[1..5] of setingi = ((n:"Edit1", v:pointer(vall1)),(n:"Edit2",v:pointer(vall2)),(n:"Edit3",v:pointer(kll)),(n:"Ed it4",v:pointer(re)),(n:"Edit5",v:pointer(ion)));
, но ругается на строкуcontrolsvalue: array[1..5] of setingi = ((n:"Edit1", v:pointer(vall1)),(n:"Edit2",v:pointer(vall2)),(n:"Edit3",v:pointer(kll)),(n:"Ed it4",v:pointer(re)),(n:"Edit5",v:pointer(ion)));
, говорит rsfunk.pas(22,52) Fatal: Syntax error, ")" expected but "," found
П.С. может особенности компилятора FPC 2.6.2?
← →
Inovet © (2013-09-19 15:57) [6]> [5] Вася (19.09.13 14:53)
> может особенности компилятора FPC 2.6.2?
Эээ, можно и так сказать, а можно - особенности Паскаля.
Во время компиляции массив инициализируется константами. Вот это
"Edit1"
константа, а это что
pointer(vall1)
? А это приведение значения переменной к типу указателя. Откуда оно во время компиляции известно? Нам это надо? Нет, такой указатель нам не нужен.
Вот они все у тебя Integer. Наверное, могут быть и другие? Или только такие?
Вобщем, для взятия адреса есть такая загогулина@vall1
А почему бы не сделать просто case? Судя по подходу, динамически эти едиты не добавляются.
← →
Вася (2013-09-19 16:06) [7]ага, сделал класс, в нем объявил нужные мне переменные, в основном модуле создал потомка класса, теперь все работает, СПАСИБО!!! :)
сейчас и есть через Case, но так намного нагляднее.
← →
Inovet © (2013-09-19 16:15) [8]> [7] Вася (19.09.13 16:06)
Кстати, для всяких таких целей у компонентов есть специальное поле Tag. Можно ему присвоить хоть указатели те же. А вообще не понятно для чего связывать переменные с едитами, что-то тут не то.
← →
Вася (2013-09-20 12:13) [9]при загрузке программы из ини файла в переменные загружаются параметры программы, которые потом повсюду используются, а при открытии формы настроек нужно чтобы в каждый эдит попала соответствующая цифра, вот и решил сопоставить именам эдитов имена переменных. кстати пример что я привел, экспериментальный, если использовать глобальные переменные, все работает, но через отдельный класс еще удобнее получилось.
Возможно изобретаю велосипед конечно, если все уже придумали до меня, подтолкните плз.
← →
[ВладОшин] © (2013-09-20 13:11) [10]ну а просто - передать массив параметров, показать, вернуть?
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
v: array[1..3] of string;
procedure SetValue;
procedure ShowValue;
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
SetValue;
ShowValue;
GetSetParam(v);
ShowValue;
end;
procedure TForm1.SetValue;
var
i: Integer;
begin
for i := 1 to 3 do
v[i] := Format("%d",[Random(999)]);
end;
procedure TForm1.ShowValue;
begin
ShowMessageFmt("%s %s %s",[v[1], v[2], v[3]]);
end;
--------------
type
TForm2 = class(TForm)
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
private { Private declarations }
public { Public declarations }
v: array[1..3] of string;
end;
procedure GetSetParam( var a: array of string );
implementation
{$R *.dfm}
procedure GetSetParam( var a: array of string );
var
F: TForm2;
i: integer;
begin
F := TForm2.Create(Application);
for i := 1 to 3 do
F.v[i] := a[i-1];
F.ShowModal;
for i := 1 to 3 do
a[i-1] := F.v[i];
FreeAndNil(F);
end;
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
i: integer;
C: TComponent;
begin
for i := 1 to 3 do
begin
C := FindComponent("edt"+inttostr(i));
if (C <> nil) and (C is TEdit) then
v[i] := TEdit(C).Text;
end;
CanClose := True;
end;
procedure TForm2.FormShow(Sender: TObject);
var
i: integer;
C: TComponent;
begin
for i := 1 to 3 do
begin
C := FindComponent("edt"+inttostr(i));
if (C <> nil) and (C is TEdit) then
TEdit(C).Text := v[i];
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.08.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c