Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.08.03;
Скачать: CL | DM;

Вниз

получить по имени переменной ее значение   Найти похожие ветки 

 
Вася   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1389006579
Sergey Masloff
2014-01-06 15:09
2014.08.03
Фантазия слабеет. Придумать говорящее имя процедуре ;-)


15-1389195134
Дмитрий СС
2014-01-08 19:32
2014.08.03
virtualbox + fmCreate + Read = EPROTO


3-1300090667
OW
2011-03-14 11:17
2014.08.03
Считаю, что странное нарушение целостности какое-то..


15-1389385804
Юрий
2014-01-11 00:30
2014.08.03
С днем рождения ! 11 января 2014 суббота


15-1388932280
Разведка
2014-01-05 18:31
2014.08.03
Преобразование даты