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 19-05-2008
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 24
mlara Va por buen camino
Muchas gracias Delphius. Como decía más arriba en este hilo, quizá haya usado la herencia visual, aunque sea de forma intuitiva. Bueno, no sabía a qué exactamente se hacía referencia en ese momento, pero ahora que das el ejemplo, pues te cuento que en mis proyectos sí la he usado, y lo he intentado hacer de la mejor manera.

Bueno, la verdad es que no sé si pudiera usar la herencia visual en este proyecto específicamente para esta ventana. Te voy a contar por qué.

Se trata de una ventana de configuración. Como las que ya conocemos, tipo ventana de opciones de Firefox o la misma ventana Editor Properties del IDE de Delphi. Tenemos varias secciones de configuración. Cada una de estas hace referencia a una parte específica de nuestro sistema, exactamente a 35 secciones. Cada sección a la que se puede acceder a través de un TreeView tiene componentes como ComboBox, CheckBox, Edit, una que otra grilla, botones, imágenes, pestañas, etc. Las secciones se parecen muy poco unas con otras, y la ventana dentro del sistema es única.

Como puedes imaginar, en primera instancia no creo que pueda usarse la herencia visual, aunque sí estoy de acuerdo en que se puede optimizar el funcionamiento de dicha ventana. para dar una idea más exacta de lo que es, he decidido poner algunos "WindowShots" en este link.

Claro, como siempre, se aceptan sugerencias , ya que entre otras cosas ya se me hace necesario optimizar esta ventanita.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 19-05-2008 a las 05:24:33.
Responder Con Cita
  #2  
Antiguo 19-05-2008
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
Hola mlara,
A como veo, yo diría que en este caso lo más útil es emplear frames.
Los frames son como forms bajo la herencia visual, pero ha diferencia de éstos, se pueden crear/detruir a demanda y se incorporan a un form. es decir que un form puedes colocar más de um frame. Cada frame puede contener su código, y no necesitaría alterarlo.
Burdamente se podría decir que son forms dentro de forms.

¿Y parte del código puede reducirse?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 19-05-2008
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 24
mlara Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
...
¿Y parte del código puede reducirse?
mmm, pues no sé. En esto debo trabajar. Lo curioso de esta ventana es que a través de ella no se hacen procesos complejos ni nada que se le parezca, ya que simplemente se leen y guardan los valores de configuración, salvo en un par de secciones en donde se usan algunos componentes de base de datos. Para dar una idea del código, transcribo un fragmento del mismo aquí:

Código:
procedure TfConfiguracion.bGuardarCambiosClick(Sender: TObject);
var
  IniFile: TIniFile;
  CI, TextLine, ModoVista: string;
  I: Short;
begin
  CI := IntToStr(fMaestro.CurrentInstitution);
  IniFile := TIniFile.Create(fMaestro.IniFileName);
  // + Estudiantes - Datos adicionales
  with sgDatosAdicionalesEstudiantes1 do begin
    IniFile.WriteString('Estudiantes', CI+'-Dato1_Nombre', Cells[4, 1]);
    IniFile.WriteString('Estudiantes', CI+'-Dato2_Nombre', Cells[4, 2]);
    ...
    if Cells[3, 1] = 'SI' then
      IniFile.WriteBool('Estudiantes', CI+'-Dato1_Habilitado', True)
    else
      IniFile.WriteBool('Estudiantes', CI+'-Dato1_Habilitado', False);
    ...
  end;  
  // + Indicadores
  IniFile.WriteBool('Logros', 'AutoInc', ckbAutoIncCodigoLogro.Checked);
  IniFile.WriteInteger('Logros', 'LogrosConsulta.Rejilla', rgRejilla.ItemIndex);
  if rbDistribucionVertical.Checked then
    IniFile.WriteInteger('Ventanas', 'LogrosConsulta.DBGLogros.Style', 2)
  else
    IniFile.WriteInteger('Ventanas', 'LogrosConsulta.DBGLogros.Style', 1);
  // + Evaluaciones y asistencia (Estilo de visualización)
  IniFile.WriteInteger('LogrosAsistencia', 'Estilo', rgEstiloEvaluacionesAsistencia.ItemIndex);
  // + Evaluaciones y asistencia (Estilo de visualización por estudiante)
  IniFile.WriteInteger('LogrosAsistencia', 'EstudiantesVisibles', rbEstudiantesVisibles.ItemIndex);
  IniFile.WriteBool('LogrosAsistencia', 'OrganizarEstudiantesAuto', ckbOrganizarEstudiantesAuto.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ConservarCodigoLogro', ckbConservarCodigo.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ConservarValoracionLogro', ckbConservarValoracion.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'AutoDesplazamiento', ckbAutoDesplazamiento.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'FaltasTotalesPeriodo', ckbPermitirFaltasTotalesPeriodo.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ForzarAreaMateria', ckbPermitirForzarAreaMateria.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'NoActualizarEval', ckbNoActualizarEval.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'SolicitarDocumentoRec', ckbSolicitarDocumentoRespaldoRec.Checked);
  // + Evaluaciones y asistencia (Estilo de visualización por materia)
  IniFile.WriteInteger('LogrosAsistencia2', 'NombresApellidos', rgListaEstudiantes.ItemIndex);
  IniFile.WriteInteger('LogrosAsistencia2', 'DireccionEvaluacion', rgDireccionEvaluacion.ItemIndex);
  IniFile.WriteInteger('LogrosAsistencia2', 'TipoSonido', cbSonidos.ItemIndex);
  ...
...y así continúa. Solamente este procedimiento tiene 398 líneas. Hay forma de reducir este código? Ya trabajaré en ello, pero inicialmente no lo veo sencillo, a no ser de que cada componente lea y guarde automáticamente el valor. Se me ocurre por ejemplo que podría usar un CheckBox extendido al que se le pueda especificar a traves de sus parámetros el lugar de lectura y escritura del valor. Aunque por ahora estudiamos cuáles de estos valores deberían almacenarse en el cliente, y cuáles en el servidor (en la base de datos).
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #4  
Antiguo 19-05-2008
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
La verdad es que la tienes dificil
En fin, quedará en ti analizar si es viable a estas alturas estructurar el código.

Lo único que se me ocurre es separar la configuración en varias partes, lo más independientemente posible, en formas separadas y tratar de conseguir un procedimiento al estilo:

procedure SaveConfiguratiosFromForm(TForm: TCustomForm);

Y buscar la manera de centralizar en un sólo punto los elementos comunes.
O algo por el estilo.

E incluso, se podría conseguir con los Frames.
Yo al menos soy de la idea de que si hay mucho que configurar, separo el trabajo en diversas configuraciones.

No se que más decirte por el momento, se me acabaron las ideas por hoy... Se me está apgando el cerebro.

Por el momento, lo que si puedo darte es ánimos. No dejes que esas KLDC te dominen.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 19-05-2008
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 24
mlara Va por buen camino
jajajajajjj... muchas gracias Delphius.

y bueno, yo por hoy me voy a dormir, después de las horas buscando la razón del error, como dijiste, puedo dormir más tranquilo.

Saludos.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #6  
Antiguo 19-05-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.614
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Que bueno que llegamos a una conclusión mlara!

Sería interesante ver si en Delphi 2007 ocurre lo mismo o si ya había sido tomada en cuenta la sugerencia de aceptar LFs solos.

Cita:
Empezado por mlara Ver Mensaje
...Lo curioso de esta ventana es que a través de ella no se hacen procesos complejos ni nada que se le parezca, ya que simplemente se leen y guardan los valores de configuración...
Código:
...
  IniFile.WriteBool('LogrosAsistencia', 'OrganizarEstudiantesAuto', ckbOrganizarEstudiantesAuto.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ConservarCodigoLogro', ckbConservarCodigo.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ConservarValoracionLogro', ckbConservarValoracion.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'AutoDesplazamiento', ckbAutoDesplazamiento.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'FaltasTotalesPeriodo', ckbPermitirFaltasTotalesPeriodo.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ForzarAreaMateria', ckbPermitirForzarAreaMateria.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'NoActualizarEval', ckbNoActualizarEval.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'SolicitarDocumentoRec', ckbSolicitarDocumentoRespaldoRec.Checked);
...
...
Esa es una de las razones por las que hace tres o cuatro años buscaba un componente conjunto de datos (data set) tipo TIniDataSet o algo por el estilo que me permitiera capturar valores de un archivo .ini en controles data aware, pero aquella búsqueda resultó infructífera.

Cita:
Empezado por mlara Ver Mensaje
...Solamente este procedimiento tiene 398 líneas...
Desde mi punto de vista, ninguna rutina debe tener más de unas cuantas decenas de líneas. He llegado a crear algunas de hasta 50 o 70 líneas, pero por lo general no las escribo con más de un pequeño puñado de sentencias. El código atomizado es más fácil de depurar y mantener y goza de mayor aprovechamiento.

Cita:
Empezado por mlara Ver Mensaje
...Hay forma de reducir este código?...
Se empieza por buscar patrones de código consistentes, susceptibles a ser optimizados.
Código:
...
  { Ajusté los nombres de los cuadros de verificación para que concordaran
    con los nombres de las llaves }
  IniFile.WriteBool('LogrosAsistencia', 'OrganizarEstudiantesAuto', ckbOrganizarEstudiantesAuto.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ConservarCodigoLogro', ckbConservarCodigoLogro.Checked);
  IniFile.WriteBool('LogrosAsistencia', 'ConservarValoracionLogro', ckbConservarValoracionLogro.Checked);
...
Aquí vemos que se hacen varias llamadas al mismo método (IniFile.WriteBool), guardando en la misma sección (LogrosAsistencia) del archivo INI, el estado que presentan diversos cuadros de verificación, los cuales llevan el mismo nombre que la llave que les corresponde, con excepción de las tres primeras letras (ckbOrganizarEstudiantesAuto -> OrganizarEstudiantesAuto).

Se me ocurre que puede escribirse un procedimiento que pueda ser llamado de esta forma:
Código Delphi [-]
  GuardarChecks ('LogrosAsistencia', ['OrganizarEstudiantesAuto', 'ConservarCodigoLogro', 'ConservarValoracionLogro', ...]);

Incluso podría reducirse más, lo anterior es solo una aproximación.

Me alegro por haber ayudado a resolver el misterio.

Un abrazo con retorno y sin fin.

Al González.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas.
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
Statement expected, but expression of type 'Boolean' found Shikanda Conexión con bases de datos 7 06-09-2007 13:26:19
"Undeclared Identifier "CLOSE" anghell77 OOP 4 09-10-2006 12:18:26
Error "File not found: AHMSystemClass.dcu" Miriamc Varios 2 05-06-2006 16:13:36
Error: "Record not found or changed by another user" jmlifi Varios 0 27-01-2006 10:16:57
Solución para el error "Field ID not found" Calderin Conexión con bases de datos 5 24-11-2004 11:18:26


La franja horaria es GMT +2. Ahora son las 01:26:31.


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