Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2021
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 19
Dexter182 Va por buen camino
Hola movorack!

¡Muchísimas gracias por tu detalladísima respuesta!.
Lo estuve probando y el problema no quiere irse.
Estuve pensando que quizás lo mejor sea también crear estos formularios dinámicamente, ya que los que creo de esa manera no tienen este problema.
Saludos!
Responder Con Cita
  #2  
Antiguo 24-11-2021
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 19
Dexter182 Va por buen camino
Bueno, sigo haciendo pruebas...

- Volví a probar el código que propuso movorack y no noto mejoras. Lo más triste es que no entiendo el porqué, ya que el código propuesto tiene toda la lógica del mundo.
- Probé de crear los formularios "a demanda" y si bien resuelvo el problema actual, se presenta otro: los formularios tardan más en abrirse, lo cuál también es lógico.

Si estoy siendo demasiado "puntilloso", por favor me lo dicen.

Difícil la vida del programador amateur...
Responder Con Cita
  #3  
Antiguo 24-11-2021
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
En el código propuesto por [movorack] haz un 'hide' al principio de 'ResetControls'. Así te aseguras de que el formulario no está visible durante ese proceso.
Responder Con Cita
  #4  
Antiguo 24-11-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Es algo extraño que los usuarios sigan viendo como limpias los controles, ya que, en el ejemplo que te he dado, eso se hace antes de cambiar el estado de la propiedad visible y por lo tanto el formulario está aún oculto. ¿Podrías compartirnos como lo implementaste en tu formulario?.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 24-11-2021
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 19
Dexter182 Va por buen camino
Muchas gracias a ambos por responder.


Les dejo el código del formulario en el que lo estoy implementando (le quité el código de los procedimientos que consideré poco relevantes para que no quede tan largo):
Código Delphi [-]
unit Tarjetas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Spin, IniFiles, XPStyleActnCtrls,
  ActnList, ActnMan, ToolWin, ActnCtrls, StdStyleActnCtrls, Buttons, StrUtils,
  Tipos, System.Actions, PngSpeedButton, System.UITypes;

type
  TForm_Tarjetas = class(TForm)
    ActionManager: TActionManager;
    ActionToolBar: TActionToolBar;
    actAceptar: TAction;
    actCancelar: TAction;
    actCredito: TAction;
    actCtaCte: TAction;
    actDebito: TAction;
    actEfectivo: TAction;
    btnAceptar: TPngSpeedButton;
    btnCancelar: TPngSpeedButton;
    cbCredito: TComboBox;
    cbCtaCte: TComboBox;
    cbDebito: TComboBox;
    eCuotas: TEdit;
    eInteres: TEdit;
    eTotal: TEdit;
    lCuotas: TLabel;
    lInteres: TLabel;
    lTotal: TLabel;
    Panel: TPanel;
    seCuotas: TSpinEdit;
    procedure actAceptarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure actCreditoExecute(Sender: TObject);
    procedure actCtaCteExecute(Sender: TObject);
    procedure actDebitoExecute(Sender: TObject);
    procedure actEfectivoExecute(Sender: TObject);
    procedure cbCreditoChange(Sender: TObject);
    procedure eInteresExit(Sender: TObject);
    procedure eInteresKeyPress(Sender: TObject; var Key: Char);
    procedure eInteresKeyUp(Sender: TObject; var Key: Word;  Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure seCuotasChange(Sender: TObject);
    procedure seCuotasKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
    Archivo_Tarjetas : TIniFile;
    Venta : TDatosPago;
    procedure Actualizar_Total(Interes_Personalizado: Boolean);
    procedure ResetControls;
  public
    { Public declarations }
    property DatosPago:TDatosPago read Venta write Venta;
    procedure Show; reintroduce;
    function ShowModal: Integer; override;
  end;

var
  Form_Tarjetas: TForm_Tarjetas;

implementation

{$R *.dfm}

uses
  Principal, Varios;

procedure TForm_Tarjetas.actEfectivoExecute(Sender: TObject);
//Al presionar el botón de "Efectivo"
begin
  cbDebito.Visible  := FALSE;
  cbCredito.Visible := FALSE;
  cbCtaCte.Visible  := FALSE;
  lCuotas.Visible   := FALSE;
  seCuotas.Visible  := FALSE;
  eCuotas.Visible   := FALSE;
  lInteres.Visible  := FALSE;
  eInteres.Visible  := FALSE;

  eTotal.Text := Venta.Total;
end;

procedure TForm_Tarjetas.actDebitoExecute(Sender: TObject);
//Al presionar el botón de "Tarjeta de Débito"
begin
  cbDebito.Visible  := TRUE;
  cbCredito.Visible := FALSE;
  cbCtaCte.Visible  := FALSE;
  lCuotas.Visible   := FALSE;
  seCuotas.Visible  := FALSE;
  eCuotas.Visible   := FALSE;
  lInteres.Visible  := FALSE;
  eInteres.Visible  := FALSE;
//  cbDebito.SetFocus;

  eTotal.Text := Venta.Total;
end;

procedure TForm_Tarjetas.actCreditoExecute(Sender: TObject);
//Al presionar el botón de "Tarjeta de Crédito"
begin
  cbDebito.Visible  := FALSE;
  cbCredito.Visible := TRUE;
  cbCtaCte.Visible  := FALSE;
  lCuotas.Visible   := TRUE;
  seCuotas.Visible  := TRUE;
  eCuotas.Visible   := TRUE;
  lInteres.Visible  := TRUE;
  eInteres.Visible  := TRUE;

  seCuotas.Text  := IntToStr(Venta.Cuotas);
//  cbCredito.SetFocus;

  Actualizar_Total(FALSE);
end;

procedure TForm_Tarjetas.actCtaCteExecute(Sender: TObject);
//Al presionar el botón de "Cuenta Corriente"
begin
  cbCtaCte.Visible  := TRUE;
  cbDebito.Visible  := FALSE;
  cbCredito.Visible := FALSE;
  lCuotas.Visible   := FALSE;
  seCuotas.Visible  := FALSE;
  eCuotas.Visible   := FALSE;
  lInteres.Visible  := FALSE;
  eInteres.Visible  := FALSE;
//  cbCtaCte.SetFocus;

  eTotal.Text := Venta.Total;
end;

procedure TForm_Tarjetas.FormClose(Sender: TObject; var Action: TCloseAction);
//Libera la memoria ocupada por el archivo INI
begin
  Archivo_Tarjetas.Free;
end;

procedure TForm_Tarjetas.ResetControls;
begin
  Hide;

  //Abre el archivo Tarjetas.ini y completa el ComboBox con los nombres de las tarjetas
  Archivo_Tarjetas := TIniFile.Create (RutaAplicacion+'Datos\Tarjetas\Tarjetas.ini');

  ActualizarCombo(cbDebito, TARJETA, '2');
  ActualizarCombo(cbCredito, TARJETA, '3');
  ActualizarComboClientes(cbCtaCte);
  cbDebito.ItemIndex  := 0;
  cbCredito.ItemIndex := 0;
  seCuotas.Alignment  := taRightJustify;

  Case Venta.FormaPago of
    Contado :
      actEfectivo.Execute;

    Credito :
      begin
        If Venta.Tarjeta <> '' then
          cbCredito.ItemIndex := cbCredito.Items.IndexOf(Venta.Tarjeta);
        actCredito.Execute;
      end;

    Debito :
      begin
        If Venta.Tarjeta <> '' then
          cbDebito.ItemIndex := cbDebito.Items.IndexOf(Venta.Tarjeta);
        actDebito.Execute;
      end;

    CtaCte :
      begin
        If Venta.Cliente <> '' then
          cbCtaCte.ItemIndex := cbCtaCte.Items.IndexOf(Venta.Cliente);
        actCtaCte.Execute;
      end;
  end; {case}
end;

procedure TForm_Tarjetas.Show;
begin
  ResetControls;

  inherited Show;
end;

function TForm_Tarjetas.ShowModal: Integer;
begin
  ResetControls;

  Result := inherited ShowModal;
end;

end.

No lo mencioné, pero el defecto no lo alcanzo a percibir en mi PC (o al menos no se nota tanto)
Yo creo que es porque es una máquina más nueva que en la PC dónde se usa el programa.

Saludos y gracias!!!

Última edición por Dexter182 fecha: 24-11-2021 a las 20:21:54.
Responder Con Cita
  #6  
Antiguo 25-11-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Como en tu formulario tienes un ActionManager, solo para descartar que este esté afectando el comportamiento del formulario. ¿Podrias modificar el ResetControls para que en lugar de llamar la acción llame el procedimiento?

Me explico, que en lugar de ejecutar actCtaCte.execute, llame a actCtaCteExecute(actCtaCte)
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #7  
Antiguo 26-11-2021
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 19
Dexter182 Va por buen camino
Gracias por responder!

Cita:
Empezado por movorack Ver Mensaje
Me explico, que en lugar de ejecutar actCtaCte.execute, llame a actCtaCteExecute(actCtaCte)
Estuve probando esto y tampoco resultó.

Para descartar, también probé de compilar como Release en vez de Debug con idem resultado.

Y también probé esto: https://stackoverflow.com/questions/...ot-of-controls

Tampoco resultó...

¿Será alguna configuración de la PC dónde está instalado?.

Saludos y mil gracias por su tiempo!!!
Responder Con Cita
  #8  
Antiguo 26-11-2021
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 19
Dexter182 Va por buen camino
Cita:
Empezado por Dexter182 Ver Mensaje
¿Será alguna configuración de la PC dónde está instalado?.
Mientras escribía el mensaje anterior se me ocurrió probar de ir deshabilitando las diversas configuraciones de "Efectos visuales" en "Configuración avanzada del Sistema" -> "Opciones avanzadas" -> "Rendimiento" -> "Configuración"

Y deshabilitando la opción: "Habilitar la composición del escritorio" se ve todo un poco más feo, pero el defecto no lo hace más.

No es la solución, pero de momento voy teniendo alguna pista de por dónde va los tiros.

Saludos!!!
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
ajustar componentes en form Rofocale Varios 9 08-12-2010 19:11:46
Componentes sin form. rauros Varios 33 31-07-2008 08:51:44
Mostrar una ventana "Inicializando" mientras se crean las Forms mancurnino Varios 6 08-05-2008 00:50:00
Ayuda con componentes en form Vinicio Varios 8 13-09-2006 21:38:50
componentes sin form coleleon OOP 1 30-11-2005 13:10:56


La franja horaria es GMT +2. Ahora son las 06:22:39.


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