Ver Mensaje Individual
  #5  
Antiguo 11-10-2004
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
Gracias Amigos,

Es mucho más simple que todo eso. Lo que quiero es asignar el índice del 'elemento seleccionado', es decir, el ItemIndex, a una variable para después volver a utilizar ese valor.

ComboBox1 tiene los siguientes Strings : 'Diario', 'Horas', 'Minutos' e 'Intervalos'. En una base de datos se va a guardar el valor 0, 1, 2 o 3, según el elemento seleccionado.

Lo que me pasa en concreto, curiosamente es lo siguiente :

Que tengo otro procedimiento asociado al DataSource
Código Delphi [-]
procedure TMasterObject.DataSource1DataChange(Sender: TObject;
  Field: TField);
begin
    ComboBox2.ItemIndex := IBQuery1DIVISIONTYPE.Value;
  Case IBQuery1DIVISIONTYPE.Value of
    0: begin
      DBEdit1.Visible := False;
      Label5.Visible  := False;
      Label4.Enabled  := False;
    end;
    1..3: begin
      DBEdit1.Visible := True;
      Label5.Visible  := True;
      Label4.Enabled  := True;
      Case IBQuery1DIVISIONTYPE.Value of
        1: Label5.Caption := 'Horas';
        2: Label5.Caption := 'Minutos';
        3: Label5.Caption := 'Intervalos';
      end;
    end;
  end;
end;

Precisamente esto lo hago para que según el valor de la base de datos en el campo DIVISIONTYPE (0,1,2 o 3) me muestre correctamente el 'String' asociado a cada valor en el ComboBox2. Hasta aquí correcto.

Pero ahora resulta que cuando selecciono un elemento del ComboBox2 y quiero asignarle el valor 0, 1, 2 o 3 según el String seleccionado mediante:
Código Delphi [-]
procedure TMasterObject.ComboBox2Exit(Sender: TObject);
begin
  Case ComboBox2.ItemIndex of
    0: begin
      DBEdit1.Visible := False;
      Label5.Visible  := False;
      Label4.Enabled  := False;
      IBQuery1.Edit;
      IBQuery1INTERVAL.Value := 0;
    end;
    1..3: begin
      DBEdit1.Visible := True;
      Label5.Visible  := True;
      Label4.Enabled  := True;
      Case ComboBox2.ItemIndex of
        1: Label5.Caption  := 'Horas';
        2: Label5.Caption  := 'Minutos';
        3: Label5.Caption  := 'Intervalos';
      end;
      IBQuery1.Edit;
    end;
  end;
  IBQuery1DIVISIONTYPE.Value := ComboBox2.ItemIndex;
  IBQuery1.Post;
end;
precisamente entonces no puedo asignar al campo DIVISIONTYPE el valor seleecionado, ya que como tengo que poner en modo edit el Query1, con IBQuery1.Edit, este a su vez me llama al método anterior del DataSource1DataChange y fastidiosamente me vuelve a resetear el valor que había inicialmente en el campo DIVISIONTYPE de la base de datos, con lo que nunca me lo cambia según estos métodos.

Lo que debería querer hacer es:
Código Delphi [-]
procedure TMasterObject.ComboBox2Exit(Sender: TObject);
var
  cVal : Integer;
begin
  cVal := ComboBox2.ItemIndex;
  Case cVal of
    0: begin
      DBEdit1.Visible := False;
      Label5.Visible  := False;
      Label4.Enabled  := False;
      IBQuery1.Edit;
      IBQuery1INTERVAL.Value := 0;
    end;
    1..3: begin
      DBEdit1.Visible := True;
      Label5.Visible  := True;
      Label4.Enabled  := True;
      Case cVal of
        1: Label5.Caption  := 'Horas';
        2: Label5.Caption  := 'Minutos';
        3: Label5.Caption  := 'Intervalos';
      end;
      IBQuery1.Edit;
    end;
  end;
  IBQuery1DIVISIONTYPE.Value := cVal;
  IBQuery1.Post;
end;

De ahí precisamente mi pregunta inicial. Quiero asignar a cVal el índice seleccionado en el ComboBox2 para despues poder hacer IBQuery1.Edit y darle el valor correcto a DIVISIONTYPE.

Lo muy raro, (por lo menos para mí, y ya sé que la solución será muy simple...) es que mirando con el Debug, cuando ejecuto
Código Delphi [-]
cVal := ComboBox2.ItemIndex
independientemente del elemento seleccionado del ComboBox2, cVal siempre es 0!! Y de nuevo mi pregunta, por qué?

Muchas gracias una vez más.
Responder Con Cita