Avatar billede Slettet bruger
31. maj 2001 - 10:39 Der er 12 kommentarer og
1 løsning

variabler for Objektnavne

Er der en måde man kan få adgang til en komponent ved at bruge en eller ande form for variabel.
Ment sådan:
x+\'12\'.top=75;

kan det ogse lade sig gore med procedurer og funktioner.

Mvh. Simon
Avatar billede martinlind Nybegynder
31. maj 2001 - 10:46 #1
Du kan sagtens have en reference til en comp. prøv at kigge på en OnClick event, hvis det er på en knap så er sender = den knap du har trykket på og du kan tilgå den sådan :

(sender as TButton) // Safe Typecast

eller

  TButton(Sender) // unsafe

du kan også tilgå en comp udfra dens navn f.eks.
Button1, det gøres med funtionen FindComponent() det tager en string som parameter og retunere en TComponent som du så kan \"caste\" som beskrevet ovenfor

/Martin
Avatar billede Slettet bruger
31. maj 2001 - 10:47 #2
?????????????????????
hvad betyder det

Mvh. Simon
Avatar billede Slettet bruger
31. maj 2001 - 10:48 #3
ment til det sisdste det er noget jeg har set før og det kan vistnok bruges.

Mvh. Simon
Avatar billede Slettet bruger
31. maj 2001 - 10:50 #4
Hvordan bruger man det.

Mvh. Simon
Avatar billede martinlind Nybegynder
31. maj 2001 - 10:53 #5
VAR

  B : TObject;

begin
  B := Button1;
  (B as TButton).Caption := \'Hej Du\';
  (FindComponent(\'Button1\') as TButton).Caption := \'Hej Du 2\';
end;

Var det mere forståeligt, eller må du sige hvad du ikke forstod

/MArtin
Avatar billede Slettet bruger
31. maj 2001 - 10:55 #6
Tak du får point hvis det hvirker jeg skal hjem først.

Mvh. Simon
Avatar billede Slettet bruger
31. maj 2001 - 10:57 #7
Mem hvad med procedurer og funtioner

Mvh. Simon
Avatar billede martinlind Nybegynder
31. maj 2001 - 11:04 #8
Det kan gøres lige som med en Event. Du definerer en Type :

  TProcedureEvent = procedure( x,y : integer ) of object;

VAR
  V : TProcedureEvent;

begin
  if Assigned(V) then V(12,34);
end;

/Martin
Avatar billede martinlind Nybegynder
31. maj 2001 - 11:06 #9
TProcedureEvent = procedure( x,y : integer ) of object;

TMyForm = class
...
public
  MyProcedure( x,y : Integer );
...
end;

VAR
  V : TProcedureEvent;

begin
  V := MyProcedure;
  if Assigned(V) then V(12,34);
end;

/Martin
Avatar billede sjensen Nybegynder
31. maj 2001 - 11:13 #10
tankred,

du ville ikke kunne bruge:

i := 1;
Button+inttostr(i).caption := \'Knaptekst\'; hvis det er det du mener,

men hvis du istedet laver dine componenter programatisk, f.eks. i et array, vil du kunne. Eks:

var
  btns : array[1..9] of TButton;
  i : integer;
begin
  for i := 1 to 9 do btns[i] := Tbutton.create;
  // nb! når du skaber componenter ^åledes skal du sætte nogle params på bl.a. ejer (container)
  // og du skal sætte hhv. højde, bredde, top og venstre for at placere dem o.s.v.
  // men derefter vil du kunne bruge:

  i := {en beregning af en eller anden slags}; // og derefter
  btns[i].name = \'Button\'+inttostr(i);
  btns[i].caption := \'TEjst\';
  btns[i].OnClick := form1.minonclickevent;
  // o.s.v.
  // \"minOnClickEvent\" kan være en hvilken som helst procedure, så længe den har et TObject som parameter.
end;

Eks. MinOnClickEvent:

procedure Form1.MinOnClickEvent(sender: TObject);
begin
  Showmessage(\'Dette er knappen med navnet \'+(sender as TButton).name);
end;

Jeg håber dette giver dig lidt yderligere forståelse
Avatar billede martinlind Nybegynder
31. maj 2001 - 11:21 #11
// nb! når du skaber componenter ^åledes skal du sætte nogle params på bl.a. ejer (container) -
---
Det vigtigste er at du sætter Parent til din Form eller Panel, ellers vil din knap nemlig ikke blive tegnet/vist.

/Martin 
Avatar billede Slettet bruger
31. maj 2001 - 19:40 #12
til sjensen det vidste jeg men jeg var meget sikker på at nogen ville forstå hvad jeg mente hvis det virkede ville jeg ikke have spurgt.

Og det martinlind sagde var en måde at gøre det på så jeg giver ham pointene.

og det med procedurene kan gøres på en anden måde som hved hjælp af den hjælp jeg har fået her kan laves men den er sikkert langsom.

Hvad kan man udover dette bruge Fx. til variabler på samme måde.

den jeg vil bruge er:
VAR

  B : TObject;

begin
  B := Button1;
  (B as TButton).Caption := \'Hej Du\';
  (FindComponent(\'Button1\') as TButton).Caption := \'Hej Du 2\';
end;

Mvh. Simon

Avatar billede martinlind Nybegynder
31. maj 2001 - 21:44 #13
Du kan også havde referencer liggende i Objects på en stringlist ( listbox.items osv. ) og du kan selv søge i components[] på din form og hvad der ellers er af containere.

/Martin
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