Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   hacer una funcion? (https://www.clubdelphi.com/foros/showthread.php?t=6149)

pepe2000 20-12-2003 01:43:17

hacer una funcion?
 
Hola a todos.
Mi problema es simple:
para crear un Tlisbox en tiempo de ejecución, con el proposito de que me sirva como lista temporal hago:

Lista:=Tlistbox.Create(Self);
Lista.Parent:=Self
Lista.Visible:=False;

Alguien puede darme una mano diciendome cómo hago una función para crear el Control lista?

La lista temporal lo utilizo como equivalente a un array temporal que creaba en clipper. (sin conocer su longitud exacta).
Alguien tiene opiniones de que otra cosa puedo usar?

Gracias anticipadas

Salu2.

Descendents 20-12-2003 02:21:05

una funcion para crear Tlistbox??

No se si te entiendo.

Por ejemplo una funcion que crea tantos listbox como un numero que tu le pases?
Código:

procedure Tform1.crearlista(num:integer);
var
n:integer;
lista:Tlistbox;
begin
  for n := 0 to num -1 do begin
  lista := Tlistbox.create(self);
  lista.parent := self;
  lista.left := k;
  k := k +150;
  end;
end;

//lo llamarias asi al procedimiento
procedure TForm1.Button1Click(Sender: TObject);
begin
  crearlista(3);
end;

A ver si esto es lo que quieres.
Saludos

Descendents 20-12-2003 02:25:48

por cierto k es una variable general integer.

otra cose, puedes crea una array of string;

var
g:array of string;
begin
SetLength(g,2);
g[0] := 'hola';
g[1] := 'adios';
end;

que quieres modificar la longitud de la array pues haces
setlength(g,3);
g[0] := 'hola';
g[1] := 'adios';
g[2] := 'hola de nuevo';

Otra cosa que se me olvidadba

tambien puedes hacer algo como
var
n:integer;
begin
for n:= 0 to LO QUE SEA do begin
setlength(g,n+1);
g[n] := EL VALOR QUE LE ASIGNES;
end;
end;

Suerte

pepe2000 21-12-2003 03:09:11

Gracias Descendents, la funcion para crear listboxs funciona correctamente, pero cómo me refiero a ellos mediante codigo. ¿que nombre tienen?

Es decir yo necesito que la variable XYZ sea un Tlistbox que se cree en tiempo de ejecución, la variable PQR, tambien...

Por ello la necesidad de hacer una función

De todas maneras tu ayuda sobre los arrays y el excelente !!
Setlength() me soluciona muchísimo mi problema.

Gracias y un saludo

Descendents 21-12-2003 05:09:02

Lo más seguro es que se digan listbox1, listbox2,listbox3 etc..., como les llama delphi por defecto cunado los pones en un form y no les cambias el nombre.

Pero de todas formas, puedes añadir una linia a la función que ponga.

lista.name := y el nombre;

Saludos

delphi.com.ar 22-12-2003 14:58:42

Cita:

pepe2000 comentó:
...crear un Tlisbox en tiempo de ejecución, con el proposito de que me sirva como lista temporal...
...La lista temporal lo utilizo como equivalente a un array temporal que creaba en clipper...
Alguien tiene opiniones de que otra cosa puedo usar?
Si no vas a necesitar que el usuario interactúe con la lista, digamos que solo la utilizarás para guardar datos, puedes crear o un array dinámico, o utilizar alguna clase como TList o TStringList (TStrings).
Para que te des una idea, los TListBox internamente utilizan una clase llamada TListBoxStrings que es heredada de un TStrings, para almacenar el contenido de la lista. Al utilizar directamente este tipo de dato, evitarás crear una ventana innecesaria en el caso de que siempre este oculta.
Te recomiendo leer la ayuda de estas clases, la documentación es muy completa. Y por otro lado, te recomiendo no pensar tu desarrollo a modo Clipper, se que esto es algo difícil si es tu primer paso en Delphi, pero personalmente creo que es un error querer programar en un lenguaje estructurando nuestro código pensando en otro.

Saludos!

pepe2000 22-12-2003 16:10:31

los arrays dinamicos son una solucion muy buena!

pero (otra vez?:), como se envia como parametro a una funcion para que en la funcion cambie de tamaño y se le asigne un valor?

Gracias por vuestra colaboración.

Saludos

Descendents 22-12-2003 16:26:05

cambie de tamaño el que ?
Y se le asigne un valor a que?

Saludos

pepe2000 22-12-2003 16:37:46

Disculpen la falta de aclaración.
Tengo un array dinamico Miarray as edit y deseo cambiar su valor DENTRO de la funcion Function ActualizaArray(...) .

Lo que sucede es que le envio como parámetro a dicha función y delphi me devuelve un error.

¿Estará Claro ahora?

Gracias

pepe2000 22-12-2003 16:39:44

deben ser los nervios por ser principiante , quise decir:
miarray as string;
:(

Lepe 29-12-2003 13:32:26

creo entender que es esto lo que quieres:

Código:

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    a: array of string;
    procedure  ActualizaArray ( a : array of string;
const NuevoValor:string; const
Indice :integer = -1);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure  TForm1.ActualizaArray ( a : array of string;
    const NuevoValor:string;
    const Indice :integer = -1);
var idx:integer;
begin
  if indice = -1 then
    idx := High(a)
  else
    idx := indice;

  a[idx]:= NuevoValor
end;

así el ultimo parámetro es opcional, si no especificas el indice, modifica el ultimo, si pones uno, pues modifica ese indice.

Yo he usado un procedimiento en lugar de una función, la verdad, no sé que valor quieres devolver en la funcion.
function ActualizaArray ( a : array of string;
const NuevoValor:string;
const Indice :integer = -1): string;

Y dentro de la funcion Result := 'valor devuelto';

Si lo he entendido mal, pon tu función y lo vemos.

Otra cosa que no le gustará al foro es esta:
Si solo tienes un array dinamico, puedes omitir ese parámetro, y al ser global, puedes acceder a ella dentro de la función. Aunque desde luego no es una buena práctica ;) y menos si estas empezando en Delphi.

Saludos


La franja horaria es GMT +2. Ahora son las 05:11:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi