Avatar billede snowball Novice
10. maj 2000 - 17:48 Der er 12 kommentarer og
2 løsninger

Opdatering af flere editboxe

Jeg nogle editboxe hvor indholdet skal opdateres hvert sek. med current time (TimeToStr(Time)). Ud for hver editbox er der en knap. Det er heller ikke noget problem at smide alle navnene på editboxene ind i en timer og så bare la' den køre hvert sek. ! MEN, jeg vil gerne ha' det så, hvis jeg f.eks. trykker på den knap der er ud for editbox 3, så tiden ikke længere bli'r opdateret i editbox 3 men alle de andre bli'r stadig opdateret hvert sek. !

Kan det la' sig gøre med én timer, eller skal jeg lave en timer til hver editbox ???

Snowball
Avatar billede retep Nybegynder
10. maj 2000 - 18:31 #1
Tjaa... Du kan for eksempel lave et array af booleans, der holder styr på hvilke TEdit's der skal opdateres.
En ide kunne være:

Type
  KontrolArray = array[1..4] of boolean;

var
  Form1: TForm1;
  Ar : Kontrolarray;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if ar[1] then
  edit1.Text := TimeToStr(Time);
  if ar[2] then
  edit2.Text := TimeToStr(Time);
  if ar[3] then
  edit3.Text := TimeToStr(Time);
  if ar[4] then
  edit4.Text := TimeToStr(Time);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
  for i := 1 to 4 do
    ar[i] := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ar[1] then
    ar[1] := false
  else
    ar[1]:= true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if ar[2] then
    ar[2] := false
  else
    ar[2]:= true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if ar[3] then
    ar[3] := false
  else
    ar[3]:= true;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if ar[4] then
    ar[4] := false
  else
    ar[4]:= true;
end;

end.

Måske er der en smartere metode, ved ikke... Du kan jo vente og se om der kommer nogle smartere indslag ;-)

Mvh
Retep
Avatar billede lrj Nybegynder
10. maj 2000 - 18:44 #2
Well, dine metoder kan i hvert fald skrives lidt nemmere:

eksempel:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ar[1] then
    ar[1] := false
  else
    ar[1]:= true;
end;

kan blive til:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ar[1]:= not ar[1];
end;


Rent faktisk kan du gøre det endnu mere generelt ved at sætte tag værdien for dine knapper til 1..4 respektivt. Og så bruge self.tag i stedet for 1.
Avatar billede snowball Novice
10. maj 2000 - 18:48 #3
lrj: Kan du ikke lige prøve og forklare det sidste lidt nærmere ???

Snowball
Avatar billede snowball Novice
10. maj 2000 - 19:12 #4
Jeg har lige testet det, og det virker helt fint, så hvis lrj lige laver det svar så kan han også få et par point for optimeringen ;)

Snowball
Avatar billede lrj Nybegynder
10. maj 2000 - 20:54 #5
Jeg skulle mene det ville virke :)
Avatar billede lrj Nybegynder
10. maj 2000 - 20:56 #6
Fuck det her system - så postede den ikke mit svar.

Nå, igen.

For din button1, som hører til det første felt sætter du dens tag property (brug Property Inspector) til 1. Nr. 2 sætter du taggen til 2, og så videre.

Tag er et felt alle Delphi-komponenter har som ikke bruges til noget, men som du i dit program kan benytte til hvad som helst, som ex. her.

Koden kan så rettes til (så vidt jeg lige kan se):

procedure TForm1.Button1Click(Sender: TObject);
begin
  ar[sender.tag]:= not ar[sender.tag];
end;


Korriger mig hvis jeg tager fejl..
Avatar billede blackthorne Nybegynder
10. maj 2000 - 21:29 #7
dog husk lige at alle buttons onclick event skal pege på button1click
Avatar billede retep Nybegynder
10. maj 2000 - 21:58 #8


ar[1]:= not ar[1];

God idé :-)

Men at bruge tag's her, er det ikke bare at gøre koden mere uoverskuelig? En smagssag...
Avatar billede snowball Novice
10. maj 2000 - 22:03 #9
Reteps løsning og med lrj's optimering virker det helt fint, så lad os bare la' det blive ved det ;)

Får i øvrigt en Undeclared Identifier: 'tag' når jeg vil compile det !?!?!?

Snowball
Avatar billede snowball Novice
10. maj 2000 - 22:12 #10
Dog ved nærmere eftertanke, så ville det egentlig være bedre hvis jeg lige kunne få self.tag til at virke !!!

Nogen forslag til hvad der kan være galt ???

Snowball
Avatar billede retep Nybegynder
10. maj 2000 - 22:17 #11
Har du gjort som Blackthorne nævner det? Og sat alle knappernes onClick til at peje på button1?

Avatar billede snowball Novice
10. maj 2000 - 22:24 #12
Yeps....Alle knappers onClick event peger på Button1's onClick event !

Button1's onClick event ser således ud:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ar[sender.tag] := not ar[sender.tag];
end;

Snowball
Avatar billede retep Nybegynder
10. maj 2000 - 22:24 #13
Det hjælper med et TypeCast :)

ar[tbutton(sender).tag]:= not ar[TButton(sender).tag];

Derudover skal du som nævnt sætte alle de yderligere knapper til at peje på button1 i ObjektInspektoren, samt huske at sætte alle knappernes tag's til deres respektive værdier... (Kan ligeledes gøres i ObjInsp)

Mvh
Retep

Avatar billede snowball Novice
10. maj 2000 - 22:31 #14
Nu virker det :-)

Tak for hjælpen !

Snowball
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