Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2006
radicalkey radicalkey is offline
Registrado
 
Registrado: nov 2006
Posts: 9
Poder: 0
radicalkey Va por buen camino
Como pasar un Listview?

Buenas, acabo de llegar al mundo del delphi, hasta ahora he estado programando en VB. Mi pregunta es:

he hecho un procedimiento que tiene que actuar sobre un listview cualquiera, pero no sé como definir el procedimiento para que, se le pueda pasar este listview "como parametro". Supongo que será por referencia, pero no sé como.

Gracias.
Responder Con Cita
  #2  
Antiguo 20-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Se pasa "por valor", ya que en delphi todos los objetos son en realidad punteros a dicho objeto. Siempre podrás modificar las propiedades y métodos del ListView dentro de tu procedimiento.

Código Delphi [-]
procedure HazAlgo( List: TListView);
begin
  list.color := clred;
end;

quizás necesites añadir el uses "ComCtrls"

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 20-11-2006
radicalkey radicalkey is offline
Registrado
 
Registrado: nov 2006
Posts: 9
Poder: 0
radicalkey Va por buen camino
Gracias

Gracias, esto que me has dicho funciona.
Otra pregunta es, si yo quiero tener este mismo procedimiento en una unit distinta como lo hago?

gracias otra vez
Responder Con Cita
  #4  
Antiguo 20-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues nada. Sitúas el procedimiento en la unidad que te sea menester y, donde vayas a usarlo, es decir, en la unidad desde la que vayas a usarlo, te aseguras de incluir la unidad que contiene el procedimiento. Básicamente sería algo así:

Código Delphi [-]
unit UProcedimientos;

interface

uses
  Graphics, ComCtrls;

// Declaración
procedure HazAlgo(List: TListView);

implementation

// Implementación
procedure HazAlgo(List: TListView);
begin
  list.color := clred;
end;

end.

Ahí tenemos a la unidad "UProcedimientos" que declara e implementa el procedimiento de ejemplo que propuso Lepe. Puedes, por lo tanto, utilizar la unidad "UProcedimientos" allí donde te sea menester, es decir, en cualquier otra unidad, incluyendo "UProcedimientos" en su claúsula "interfaz" o "implementation".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 20-11-2006
radicalkey radicalkey is offline
Registrado
 
Registrado: nov 2006
Posts: 9
Poder: 0
radicalkey Va por buen camino
gracias

gracias por vuestra ayuda
Responder Con Cita
  #6  
Antiguo 20-11-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Cita:
Empezado por Lepe
Se pasa "por valor"
Creo que va a ser que no, cuando lo que pasamos es la dirección en memoria donde está guardada la variable, como es el caso, estamos en presencia de traspaso "por referencia". Al menos así me lo enseñó la nana


Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #7  
Antiguo 20-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
no, no, que no. Que no e a. (nada, que me apetecía un trabalenguas )

Código Delphi [-]
procedure Porvalor(const dato:integer);

procedure PorReferencia(var dato:integer);

Al menos a mí me enseñaron que pasar por referencia implica el "var" delante del parámetro, y podemos modificar el valor de la variable "dato".

En el caso de objetos, digamos que "no es común" modificar el valor de la variable, es como si quisiéramos hacer esto:
Código Delphi [-]
procedure PorReferencia(var dato:TListView);
begin
  dato := pointer(300);
end;
Aquí si es necesario pasar el ListView por referencia, ya que estamos modificando el valor que contiene la variable dato... aunque eso si... a saber qué hay en la dirección 300 de nuestra RAM, casi seguro que no está el ListView

Al pasar un objeto por valor, realmente estamos queriendo decir que su dirección de RAM no la podemos cambiar. Pero podemos modificar todas sus propiedades y eventos, ya que estos, no se encuentran en la propia variable "dato" sino en el espacio que ocupa el objeto.

Ufff, no sé si he tenido una violación de acceso a memoria con tanto objeto en mente

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 20-11-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Pues yo mantengo mi postura, y de paso, rectifico lo que dije

Además quien a visto que una nana sepa programar.... y mucho menos en delphi.

Para asegurarme de que tienes razón hice la siguiente prueba:



Código Delphi [-]
private
    { Private declarations }
    Obj1 : TStrings;
    Obj2 : TStrings;
    Procedure Intercambia(O1 , O2: TStrings);
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  Obj1 := TStringList.Create;
  Obj2 := TStringList.Create;
  Obj1.Add('Prueba') ;
  Intercambia(Obj1,Obj2);
  ShowMessage(Obj2[0]);
end;
procedure TForm1.Intercambia(O1 , O2: TStrings);
 Var
   Temp : TStrings;
begin
 Temp :=  O1;
 O1   :=  O2;
 O2   := Temp
end;
//Esto da un lindo error, pero si la sustituimos por:
Procedure Intercambia(Var O1 , O2: TStrings);
....
 
procedure TForm1.Intercambia( Var O1 ,O2: TStrings);
 Var
   Temp : TStrings;
begin
 Temp :=  O1;
 O1   :=  O2;
 O2   := Temp
end;
 
//Todod Marcha como se espera.




Bueno esto demuestra la teoría de Lepe, por tanto acabo de perder el juicio

Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como cargar Imagenes en un ListView johurgi Varios 0 16-08-2006 12:07:53
Como seleccionar una linea en un listview judoboy Varios 1 23-09-2005 13:43:03
Como Trabajar los listview en delphi 7 Shidalis Varios 9 19-07-2005 16:03:49
Como seleccionar en un ListView k2k2k2 Varios 3 28-06-2004 22:53:21
pasar ListView al Clipboard allende Varios 2 03-12-2003 19:31:36


La franja horaria es GMT +2. Ahora son las 04:53:11.


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