Avatar billede koonz Nybegynder
01. februar 2000 - 17:14 Der er 6 kommentarer og
2 løsninger

"smart" procedure til udfyld og synlige editbokse

Jeg har to rækker editbokse af 16 stk
Dem til venstre hedder edtLeft 1 - 16
Dem til højre  hedder edtRight 1 - 16

Jeg har en input værdi - lad os bare kalde 1 eller 2

Hvis værdien er 1 skal kun hver anden i hver række være synlig, statende med en synlig i venstre side

Hvis værdien er 2 skal kun hver anden i hver række være synlig, statende med en synlig i højre side side

Bagefter skal jeg så have noget puttet i de synlige bokse.
Lad os antage, vi sætter en counter til at tælle til 8, tallet skal så skiftevis puttes i venstre, og højre boks.

1
2
3
4

osv.


Jeg har spekuleret lidt over den, og det må være noget med componencount - i begge tilfælde, men jeg er ikke helt stiv i det.

Nogen der har foreslag ?


Avatar billede sjensen Nybegynder
01. februar 2000 - 17:38 #1
Hvis du glemmer de editbokse du kan komme på din skærm som drop-komponent, så lav et array[1..32] af TEdit og brug det i stedet. Så kan du arbejde med dine editbokse som om det var en alm. variabel, og for at holde styr på rækkerne og fordelingen antager du at alle ulige er venstre og alle lige er højre:

i Formcreate skaber du dem alle:

for i := 1 to 32 do
editfelt[i] := TEdit.create(self) eller (Form) eller hvad du vil.

(Husk at free dem igen i formdestroy !)
herefter sætter du alle top/left med en beregning samt parent (vigtigt for at du kan se dem når de er visible):

Sttop := 8;
Stleft := 16;

for i := 1 to 32 do
begin
  editfelt[i].top := sttop + ((i-1) * 23); // 23 er højden af her editfelt
  editfelt[i].left := stleft + (i-1 mod 2) * (startpos for feltern i i højre side); //
  editfelt[i]. visible := false;
  editfelt[i].parent := form1; // eller panel1 eller hvad der nu er forældre

Herefter er der bare at ræse dette array igennem og sætte hhv. visible til true/false afhængig af om de skal vises eller er og sætte teksten der skal vises:

editfelt[i].text := 'bla bla';


Kan du se fidusen ?

sjensen
Avatar billede sjensen Nybegynder
01. februar 2000 - 17:41 #2
stavefejls rettelser:

// 23 er højden af hvert editfelt

(startpos for felterne i i højre side);

.. afhængig af om de skal vises eller ej og ..

beklager, jeg var lidt for hurtig med at trykke på udfør.

sjensen
Avatar billede koonz Nybegynder
01. februar 2000 - 19:59 #3
Tak for hjælpen Sjensen - det har dog ikke løst det hele, men jeg har fundet ud af at min database ikke var særlig smart opbygget, så med laver jeg den om slipper jeg for alt for meget bøvl.

Du skal selfølgelig have point for dit besvær - selvom det ikke løste det hele hjalp det mig pænt på vej, jeg håber det er OK

Igen tak for hjælpen ;)
Avatar billede sjensen Nybegynder
01. februar 2000 - 22:58 #4
Fint nok, koonz. Jeg håber det biver godt det du er igang med.

sjensen
Avatar billede snorga Nybegynder
02. februar 2000 - 02:48 #5
Der en en funktion der hedder FindComponent (på TForm), den kan vist bruges til det du vil:
(funktionen er ligeglad med store/små bokstaver)
(den regner med at der finde edit felter fra Edit1-Edit10)

Var
  E:TEdit;
  i:integer;
begin
  For i:=1 to 10 do begin 
    e:=FindComponent('edit1') as TEdit;
    If e=nil then continue; //Dette vil ikke ske hvis du har 10 TEdit felter som hedder Edit1 - edit10.
    e.Text:='hvad der nu skal i'
  end;
end;

Du kan evt ligge Edit felterne ind i et array som sjensen bruger (her behøre du bare ikke oprette og nedlægge dem selv)
Avatar billede koonz Nybegynder
02. februar 2000 - 07:09 #6
Lige en kommentar ;)

Jeg har prøvet noget af Sjensen eksempel (Så jeg husker det til den dag jeg skal bruge det), men jeg kan ikke få det til at spille, med at oprette Edit felterne i et array - jeg får en fejl på linjen

editfelt[i] := TEdit.create(self)

Er der en af jer der gider at ligge et eksempel - med "fuld" kode altså variable osv.

På forhånd tak
Avatar billede dj Nybegynder
04. februar 2000 - 20:55 #7
koonz>> brug Sjensen's eksempel, men tilføj Editfelt: Array[0..100] of Tedit; under Public Procedures.. altså :

USES Windows, Forms, osv.

Tform1= class(Tform)
...
Private Procedures
..
Public Procedures
  Editfelt: Array[0..100] of Tedit; 
end;

og så insæt koden fra Sjensen, så skulle den være der.
Note: Der er gjort plads til 100 editbokse i hukommelsen hvis du anvender [0..100] hvis du synes dette er for meget/lidt kan du bare ændre det der.

Mvh. _DJ_
Avatar billede koonz Nybegynder
05. februar 2000 - 19:07 #8
Tak DJ, jeg fandt selv ud af den manglede, men jeg er nok ikke helt hjemme i at bruge "system" variable, man skal lige for et øjeblik glemme den gamle pascal ;)

Igen - tak for hjælpen
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