Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1389342603
Юрий
2014-01-10 12:30
2014.08.03
С днем рождения ! 10 января 2014 пятница


15-1389092680
Dimka Maslov
2014-01-07 15:04
2014.08.03
А не спеть ли нам пестню...


3-1300095610
Бинар
2011-03-14 12:40
2014.08.03
Прерывание запроса


15-1387350030
Пит
2013-12-18 11:00
2014.08.03
Ветка Розыча о задачке?


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский