czy istnieje sposób aby w nazwie identyfikatorakomponentu umieścić zmienną??? Np. aby było Edit(n) ....(to znaczy pole Edit o numerze n) , gdzie n jest zmienną (n:byte); Wówczas w zależności od tego jaką wartość przybrałaby zmienna n tekst byłby wyświetlany w polu Edit o numerze n....???????????????
Tak się nie da jak napisałeś. Ale możesz np. napisać taką funkcję:
function Edit(n: byte):TEdit;
begin
Result := FindComponent('Edit' + IntToStr(n)) as TEdit;
end;
I używasz tak:
Edit(numer_edita).Text := 'bla bla';
Tylko nazwy editów MUSZĄ być typu: Edit1, Edit2, Edit3 itd.
dzięki..:) wyprubuję.....
Inny, moim zdaniem mniej zakręcony i krótszy sposób :
var
Edit : array of TEdit;
begin
Edit[0].Caption := 'blablabla';
end;
//DOPISANE
Racja, MatroX, pisałem skrótem...
berl - twój sposób wydaje się być bezpieczniejszy, ale trzeba jeszcze przypisać coś do tej tablicy. Można by zrobić to tak:
var
Idx: Integer;
begin
for Idx := 0 to Form1.ComponentCount -1 do
if Form1.Components[Idx] is TEdit then
begin
SetLength(Edit, High(Edit) + 2);
Edit[High(Edit)] := Form1.components[Idx] as TEdit;
end;
end;
Pozwolę sobie odkopać temat żeby nie zakładać drugiego prawie identycznego...
A czy jest sposób aby w takiej tablicy elementy wskazywały na procedury z jakiejś własnej klasy ?
Jeżeli tak, to ja to zrobić?
Edit[3].OnClick:=MojaKlasa.Edit3Click;
Jest, zadeklarować typ rekordowy z polem typu TMyProc, które może wyglądać tak:
TMyProc: procedure(Parametry) of object;
Pogoogluj sobie za przykładami, bo w tej chwili z Androida ciężko cokolwiek mi wklejać jak i pisać od zera.
Edit: Dragon mnie ubiegł, ale ja te pytanie zrozumiałem zupełnie inaczej i na nie odpowiedxiałem, bo wydaje się mi że o coś takiego chodzi. Używanie standardowych własności danego typu to przecież banał i nie mo co tutaj tłumaczyć według mnie.
@olesio dobrze mnie zrozumiałeś.
Wklepałem coś takiego :
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
type
procedura = procedure of object;
procedury = array[0..2] of procedura;
var
Form1: TForm1;
implementation
procedure test_jeden;
begin
ShowMessage('Wywołanie procedury test_jeden');
end;
procedure test_dwa;
begin
ShowMessage('Wywołanie procedury test_dwa');
end;
procedure test_trzy;
begin
ShowMessage('Wywołanie procedury test_trzy');
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
procedury[0]:=test_jeden;
end;
{$R *.lfm}
end.
Jednak otrzymuje błąd:
unit1.pas(52,3) Error: Variable identifier expected
unit1.pas(52,17) Error: Incompatible types: got "untyped" expected "<procedure variable type of procedure of object;Register>"
unit1.pas(60) Fatal: There were 2 errors compiling module, stopping
EDIT
Zaznaczę (pewnie to najistotniejsza a ja to pominąłem) że pisze w Lazarusie
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure test_jeden;
procedure test_dwa;
procedure test_trzy;
public
{ public declarations }
end;
var
Form1: TForm1;
procedury:array of procedure of object;
implementation
{$R *.lfm}
procedure TForm1.test_jeden;
begin
ShowMessage('Wywołanie procedury test_jeden');
end;
procedure TForm1.test_dwa;
begin
ShowMessage('Wywołanie procedury test_dwa');
end;
procedure TForm1.test_trzy;
begin
ShowMessage('Wywołanie procedury test_trzy');
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(procedury,1);
procedury[0]:=@test_jeden;
end;
end.
@hipekk: dopiero teraz jestem w domu, odespałem zmianę w pracy to mogę odpisać. A i @_13th_Dragon mnie ubiegł. Ale powinieneś już wiedzieć o co chodzi. Twój bład polega na tym, że coś kombinujesz w typach za dużo. Powinno być albo tak jak pokazał poprzednik albo najprościej tak:
type
TMyProc = procedure of object;
var
Arr : array[0..2] of TMyProc;
Dziękuję serdecznie Panowie @olesio i @_13th_Dragon - wszystko działa zgodnie z zamierzeniem :)
Pozdrawiam :)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.