Avatar billede c.h. Nybegynder
06. april 2000 - 01:07 Der er 10 kommentarer og
2 løsninger

prop en component i et array

Er det muligt at proppe f.eks. en editboks navn ind i et array så man kan kalde det i en løkke som jeg har forsøgt forklaret i nedenstående? 

Eks. på hvad jeg mener, her med en editbox:

var navn: Array[0..1] of entypejegikkevedhvadskalvære=(edit1,edit2);

procedure test;
var i: integer;
begin
for i:=0 to 1 do navn[i].text:='Noget tekst';
end;
Avatar billede lrj Nybegynder
06. april 2000 - 01:42 #1
Problemet er at edit-boxe er objekter, og de skal være oprettet for at du kan bruge dem. Du kan altså ikke smide dem ind i et array uden at initialisere dem. Det er altså ikke som med integers eller strings.

så det er noget med

navn: array[0..1] of tedit;

og initialiseringen:

nyedit := tedit.create(form1);
nyedit.parent:=form1;

array[0]:=nyedit

(og så gøre det i en løkke optil max i arrayet)

så kan du nemlig gøre som du har skrevet i dit eksempel.

Men for at du kan se at der er flere edit-boxe må du rette på top og left egenskaberne - ellers vises det jo samme sted på formen.

Velkommen til en verden af dynamisk programmering :)
Avatar billede lrj Nybegynder
06. april 2000 - 01:43 #2
Og vil du gerne gøre det med eksisterende edit-boxe kan du gøre noget tilsvarende:

det er stadig
navn: array[0..1] of tedit;

og så tager du:

array[0]:=form1.edit1;
array[1]:=form1.edit2;

Så kan du igen gennemløbe arrayet. Her er forskellen så at du kan placere dine edit-boxe med Delphi's GUI.
Avatar billede lrj Nybegynder
06. april 2000 - 01:45 #3
Sidst men ikke mindst kan det gøres ved at enumerere igennem alle komponenter på en form, og undersøge om den aktuelle komponent er en tedit. Er den det sætter du så text-propertien.

Vil du have et eksempel på det, så sig lige til - så finder jeg det
Avatar billede sjensen Nybegynder
06. april 2000 - 10:54 #4
c.h.,

Hvis du bruger lrj's første forslag så skal du lige huske på at ALT du selv "creater" skal du "free"'e igen

d.v.s.

i create form
for i := 1 to 10 do
begin
  earray[i] := tedit.create;
  earray[i].parent := form1;
  // sæt alle properties
  // eks. earray[i].top  := 125;
  //      earray[i].left := 16 + ((i-1) * 200);
  // o.s.v.
end;

i destroy form
for i := 0 to 10 do earray[i].free;
Avatar billede c.h. Nybegynder
06. april 2000 - 13:04 #5
Det skal være med eksisterende editbokse, så løsning to er vel bedst.
Men hvad er Delphi's GUI?
Og hvad vil det sige at enumerere? Jeg vil meget gerne se et eksempel på dette.
Er det muligt som med integers at proppe elementerne ind under erklæringen af Arrayet? Altså at skrive svarende til
navn: array[0..1] of Integer=(2,3);
Avatar billede lrj Nybegynder
06. april 2000 - 14:52 #6
c.h.> Det sidste du nævner kan, så vidt jeg ved, ikke lade sig gøre. Sådan hænger tingene ikke helt sammen.

Delphi's GUI er det du "tegner" dine programmer i - det står for Graphical User Interface - eller på dansk - brugergrænseflade.

At enumerere vil sige at gennemløbe noget i en bestemt rækkefølge, ex. fra lavest til højest. I dette tilfælde vil det sige at gennemløbe alle komponenter på en form (form1 for eksempel) og undersøge hver enkelt komponent. Jeg tror dog ikke det er den løsning du er ude efter - det er nemlig temmelig hardcore :)
Avatar billede psv Nybegynder
06. april 2000 - 21:28 #7
At enumerere er ikke gennemløbet af en... At enumerere er at tildele en rækkefølge... (Altså bestemme HVAd der er lavest og højest)

Bare for at kværulere :-)
Avatar billede lrj Nybegynder
06. april 2000 - 21:52 #8
Hehe, jeg VIDSTE en eller anden ville korrigere mig :) Var nemlig ikke 100% sikker da jeg skrev det. Men meningen er vist ca. tæt nok på i den her kontekst :)
Avatar billede c.h. Nybegynder
08. april 2000 - 21:35 #9
Giver du mig upræcise oplysninger? : )

Er der nogen særlig grund til at det ikke er muligt at gemme komponenter ved erklæring af arrayet?
Avatar billede lrj Nybegynder
10. april 2000 - 01:23 #10
Ork ja :)

Det er fordi det er objekter, og ikke statiske størrelser som integer og char. De er af natur dynamiske - de kan ændres/ændre sig mens programmet kører.

Så vidt jeg ved kan du ikke oprette objekter direkte mens du deklererer et array. Men har du prøvet at kigge nærmere på initialization og finalization delen af dine units? Her har du noget større mulighed for at få alle tingene sat ordentligt op før programmet er helt startet. Bemærk dog at du ikke kan manipulere din form hvis den bliver skabt automatisk (altså i initialization i unit1 som indeholder form1 - piller du ikke ved opsætningen kan du ikke tilgå form1.whatever i initialiseringen - form1 er endnu ikke defineret).

Normalt når man har en liste af objekter bruger man ikke arrays, da de normalt er af en fast størrelse. Det KAN lade sig gøre at lave dynamiske arrays - men det er temmelig langhåret :)

I stedet kan du med fordel kigge nærmere på TList. Den kan nemlig have en "uendelig" lang liste af objekter, ex. TButton eller nogen du selv laver, uden at du bestemmer størrelsen på forhånd. Og så er den forholdsvis nem at benytte :)

Held og lykke.
Avatar billede c.h. Nybegynder
11. april 2000 - 18:39 #11
Hvordan kigger jeg nærmere på initialization og finalization delen. Skal man bruge øjnene : )  - seriøst, hvor finder jeg dem?

Nu du nævner dynamiske arrays - så er det faktisk noget jeg spurgte om for et par uger siden. Og jeg giver dig ret - det er særdeles temmelig meget langhåret.
Men det der med at bruge TList ser rigtig smart ud. Hvorfor startede du ikke med at sige det? :)
Avatar billede lrj Nybegynder
11. april 2000 - 22:49 #12
Du ville have en array-løsning... :o)

Opslag af initialization, finalization og andet i Delphi's hjælp - skriv ordet et sted i din fil (evt. hvor det skal bruges :o), placer markøren over det, og tryk F1 - så hopper hjælpen frem med et relevant afsnit. Smart :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester