Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Bueno... la verdad es que por ahora... me estoy inclinando en usar y mejorar mi unidad. Sigo tratando de entender eso del metodo de clase y TVentana.... ya veré si encuentro la luz a todo este asunto.

Saludos,

PD: Disculpen que en el post anterior haya soltado semejante texto... quería tratar de exponer con claridad mi idea y lo que podía llegar a entender.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 11-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 23
AzidRain Va camino a la fama
No se si no entendí bien o me parece que estamos reinventando la rueda...

El que una ventana sea o no modal no radica en alguna de sus propiedades, es decir no es que haya ventanas que son modales o no modales "per se" . Mas bien se trata de un comportamiento de la ventana al momento de mostrarse. De ahi que una ventana puede mostrarse en forma modal con ShowModal o amodal con Show.

Asi tenemos que quien decidirá si una ventana se muestra o no en forma modal eres tu mismo y esto solo se lo indicas a la ventana.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 11-12-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Cita:
Empezado por AzidRain
No se si no entendí bien o me parece que estamos reinventando la rueda...

El que una ventana sea o no modal no radica en alguna de sus propiedades, es decir no es que haya ventanas que son modales o no modales "per se" . Mas bien se trata de un comportamiento de la ventana al momento de mostrarse. De ahi que una ventana puede mostrarse en forma modal con ShowModal o amodal con Show.

Asi tenemos que quien decidirá si una ventana se muestra o no en forma modal eres tu mismo y esto solo se lo indicas a la ventana.
Gracias por responder AzidRain. Tengo bien en claro que no radica en propiedades... y que es a gusto de uno como se visualiza. No me expliqué bien...

Lo que pretendo es implementar es funciones, procedimientos que brinden mayor funcionalidad y manejo para el tratamiento de ventanas tanto ya sea como modales o no. Por ejemplo: Si tienes varias ventanas... digamos unas 50 entre modales y no modales lo más natural es que busques implementar código reutilizable para ver como se muestran... que debe realizar.. etc... etc... lo que ofrece Ian en su ejemplo es un método de clase que crea ventanas y guarda ciertos valores (en Tag) para que luego... por poner un ejemplo: dependiendo de lo que almacene hablitar controles. Es una tarea comùn... y muy habitual. Ian, a mi entender, propone que estos métodos genéricos (para ambos usos) queden encapsulados en la clase... y evitarias tener que emplear unidades extras para lograr lo que bastaría ahora con un:

Ventana.HazAlgo(bla, bla)...



Mi intención es ampliar las ideas de Ian... y darle mayor métodos de clase y facilitarme el uso de varias unidades. Métodos genéricos... después... una vez ya declarados... es cuestión de usarlos cuando sean necesarios y los necearios para un aplicativo en particular.

Mi problema es que Ian no termina de explicar, a mi entender, donde... y cómo implementar sus ejemplos. Se que un método de clase es:

Código Delphi [-]
class Function LaClase.NombreFuncion(parámetros): TipoResultado

Me marea el hecho es que que el pone: TVentanaModal.Mostrar y en ninguna parte me dice si TVenatanaModal es que... derivado de TForm... ¿Y si declaro la clase.... como la instancio? si.. con create pero ... y que además se "vea la forma" y pueda incorporarle botones... grids... en sintesis controles... es mi dilema...

A ver si ahora si se me entiende mejor...
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 11-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 23
AzidRain Va camino a la fama
Lo que anotas en tu código me suena como a un gestor de ventanas, pero mre resulta ocioso porque la propia ventana ya contiene código para hacer todo lo que mencionas.. Por otro lado creo que bastaría con extender la clase TForm e ir añadiendo la funcionalidad que requieras según el tipo de ventana o según lo que quieras hacer con cada ventana.

Seria de mas ayuda que empezaras por un diagrama estático UML para modelar lo que quieres hacer antes de empezar con código, te clarificaría mas el concepto ya que estamos hablando de cosas abstractas...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 11-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Yo lo de usar el .Tag me horroriza.

Cuando usé el .Tag en 3 componentes de un mismo form tenía un cacao mental que ni te cuento. Que si el tag se guardaba esto, en aquel componente significa lo otro...

Si tienes un Form y quieres guardar el estado de la ventana, por poner un ejemplo, aplico el archiconocido KISS (Keep It Simple Stupid )

Código Delphi [-]
type TEstado = (eModal, eNormal);

TForm1 = class(Tform);

public
   property Estado:TEstado read Festado write FEstado;
end;
Ni constantes, ni tags, ni números. Queda claro nada más ver el código, solo hay dos posibilidades "Estado Normal" y "Estado Modal"

Las funciones de clase no las uso mucho, ya que de hecho, cuando se ejecutan aún no existe el objeto en memoria (no se ha creado aún), así que hay que tener cuidado al usarlo.

La herencia visual desde cero. Creas una ventana llamada BaseForm: (file -> New -> Form)
Código Delphi [-]
{-----------------------------------------------------------------------------
 Unit Name: BaseForm
 Purpose:
    - Heredan de TBaseForm todas las ventanas con IDentificador de cada tabla.
    - No usan las variables globales de cada Form.

 History:
-----------------------------------------------------------------------------}

unit UBaseForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TBaseForm = class(TForm)
  protected
    function GetId:integer; virtual; abstract; 
    procedure SetId(const Value: integer);virtual; abstract;
  public
    { public declarations }
    property Id:integer read GetId write SetId;
  end;

implementation

{$R *.dfm}

end.
Ahora como bien dices, vas a File -> new -> other -> forms -> heredar de (tbaseForm)

La nueva ventana aparece así:
Código Delphi [-]

type
  TfrmCliente = class(TBaseForm)

    function GetId: integer; override;
    procedure SetId(const Value: integer);override;
  public
      { Public declarations }
    property Id;
  end;

Solo queda implementar los métodos en la ventana que toque:
Código Delphi [-]
procedure TfrmCliente.SetId(const Value: integer);
begin
  dscliente.Locate('IDCLIENTE',Value,[]);
end;

function TfrmCliente.Getid: integer;
begin
    Result:= dsclienteIDCLIENTE.AsInteger;
end;

Si tienes 10 ventanas (clientes, proveedores, factura, albaran, productos, ...)
todas heredan de TBaseForm, por tanto ya tiene su propiedad Id.

A lo que voy, crear cualquier ventana e ir a un registro, se simplifica:
Código Delphi [-]
var Forma :TBaseForm
begin
  Forma := TFrmcliente / TFrmFactura / TfrmProductos .Create(Self);
  Forma.ID := 32 // el cliente 32, la factura 32, el producto 32, etc.
  Forma.Show;
end;

Da igual si usas ADO, BDE, MDOLIB, etc

La Forma Base puede tener controles en su interior, pero eso si, no podrás quitarlos en una ventana heredada, por tanto, hay que pensar bien qué llevará un TBaseForm, por ejemplo un Toolbar y el botón "Buscar", el resto de botones del toolbar se pueden añadir después a TfrmCliente.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 11-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Reholas.

Estuve pensando casi 1 hora como responder el mensaje anterior, sin mucho éxito, verás:

El problema que intentan solucionar todas las rutinas es encontrar si la ventana está creada o no y después interactuar con ellas. Usando otra filosofía nos quitamos ese problema de encima:

Código Delphi [-]
procedure TForm1.FormClose(... Action:TCloseAction);
begin
  Action := cafree;
  Form1 := nil
end;
Ya no tenemos que buscar en todas las ventanas de TScreen para saber si está creada o no, basta con:
Código Delphi [-]
if Assigned(Form1) then // equivale a if Form1 <> nil then
  // está creada
else
  // no lo está
end;

DestruirForma se consigue accediendo a Form1.Close

ExpandirForma se puede sustituir por el método SetBounds del TForm, que ya permite modificar sus cuatro propiedades top, left, width, height y es una sola llamada. Sí le vería sentido a ExpandirForma si al agrandar el ancho no cupieses en pantalla y entonces modificara su Left para que tuviese el ancho especificado por parámetro.

Las rutinas MinimizarAplicacion y FinalizarAplicacion son más del tipo "Sistema GH" de Al González, en ese aspecto no entro, ya que le tengo bastante respeto a Al, y a sus conocimientos ; yo al menos no usaría un procedimiento que solo tenga una línea de código.

Si ya estan diseñadas las funciones y las estas utilizando, no cambies el código, pero no te aconsejaría que creases mil y una función, (mira sistema GH antes )

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 12-12-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Gracias Lepe

Lepe gracias por responder... la verdad es que a tu código lo voy entiendo y tiene sentido. Eso si, hay algo que no me cierra:

Cita:
Empezado por Lepe
La herencia visual desde cero. Creas una ventana llamada BaseForm: (file -> New -> Form)
(....)
Ahora como bien dices, vas a File -> new -> other -> forms -> heredar de (tbaseForm)
Entiendo como se hace la herencia visual... pero, a mi entender, en esta forma de crear la ventana BaseForm al momento de "guardarla" lo hace dentro de un proyecto específico (puede que esté equivocado) por poner un ejemplo: Project1.dpr
Por tanto... cuando uno realiza File -> New -> other -> forms toma las formas presentes en el proyecto... en este caso Project1.dpr

Mi intenciòn es tener una clase genérica, y no que quede guardada en un proyecto en particular.

Si me puedes aclarar esa duda... a lo mejor pueda apreciar mejor las alternativas.

El código que había puesto en un anterior post era como una práctica... en los primeros días en que me senté frente a Delphi. Si es cierto que tiene funciones que son inútiles mantenerlas Ahora lo se... le saqué el polvo al disco duro... y apareció. La verdad es que la usaba cuando hacia mis prácticas para la facu y aplicaciones chicas.

Lo que pasa es que ando viendo como mejorar esto del tratamiento de ventanas para que se me facilite la vida.... tengo que empezar a meter código para mi tesis... y después de unos análisis me di cuenta de que va tener bastantes pantallas... y tener una libreria como esa... por dios.... ¡necesito algo mejor!
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ventanas Modales subzero Varios 1 27-09-2006 02:30:13
DLL y ventanas no modales droguerman OOP 0 15-09-2006 03:24:27
Ventanas modales en Kylix salvica Lazarus, FreePascal, Kylix, etc. 2 15-09-2006 01:36:01
Ventanas modales PTW Varios 1 19-05-2005 16:21:22
Nuevas dudas sobre ventanas modales radiohead OOP 2 26-10-2004 15:34:34


La franja horaria es GMT +2. Ahora son las 19:47:35.


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
Copyright 1996-2007 Club Delphi