Ver Mensaje Individual
  #16  
Antiguo 10-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
En lo que me toca, ya he dicho que uso un panel al que se le pueden poner las lineas independientes, y la parte lógica (la clase TCuadro) informa mediante un evento cuando se cierra un cuadro a la parte gráfica. En ese evento es cuando repinto el fondo de un color si está cerrado o no.

El dibujar una linea, se hace en la parte gráfica, al hacer clic cerca de los bordes , detecto qué borde es y directamente lo pinto, despues informo a TCuadro, y este propaga un mensaje por sus vecinos para ver si se deben cerrar o no. Básicamente es como una onda expansiva, en cuanto a eficiencia no es nada bueno, pero son las primeras pruebas que he realizado.

Mi Tcuadro queda así (aunque no descarto cambios):
Código Delphi [-]
type
  TCuadro = class;
  TNotifyText = procedure (Sender:Tcuadro; Cerrado:boolean) of object;
  TLineas = (lNorte, lSur,lEste, lOeste);
  SetOflineas = set of TLineas;

  TCuadro = Class(TObject)
  protected
    Semaforo:Boolean;
  public
    constructor Create();
  published
    property Oeste:Boolean read FOeste Write SetOeste default False;
    property Norte:Boolean read FNorte Write SetNorte default False;
    property Sur:Boolean read GetSur;
    property Este:Boolean read GetEste;

    property VecinoNorte :Tcuadro read VNorte Write SetVNorte;
    property VecinoSur   :Tcuadro read VSur Write SetVSur;
    property VecinoOeste :Tcuadro read VOeste Write SetVOeste;
    property VecinoEste  :TCuadro read VEste Write SetVEste;

    property Cerrado:Boolean read GetCerrado Write SetCerrado;
    property Lineas:SetOflineas read GetLineas;
    property NLineas :Integer read GetNLineas;
    property Contro:TComponent read Fcontrol Write Fcontrol;

    property OnCierre:TNotifyText read FOncierre Write FOnCierre;
    procedure CompruebaCierre;
  end;

Sur y Este, lo que hacen es ver si su vecino tiene el Oeste marcado, o si es el borde inferior/derecho del Timbiriche

Al inicio, VecinoXXXXX será nil, y al crear la cuadrícula es cuando se unen unos con otros.

Lineas y NLineas, son propiedades de ayuda, para ver qué lineas tiene pintada un cuadro determinado.

Contro es el control de la interfaz gráfica al que está asociado, Mi Panel. Una vez creado el Panel en tiempo de ejecución, y la clase, los asocio mediante esa propiedad, igual que se hace con un TAction.

Por último, tenemos el evento de cierre, que me indica el cuadro que se ha cerrado.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita