Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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
Poder: 21
gluglu Va por buen camino
Asignar valor ComboBox a una variable

Por qué?
Código Delphi [-]
procedure TMasterObject.ComboBox1Exit(Sender: TObject);
var
   cVal : Integer;
begin
  cVal := ComboBox1.ItemIndex;
  Case ComboBox1.ItemIndex of
    0:
      begin .....
Con el Debug veo que el valor de ComboBox1.ItemIndex es = 0,1,2,3 pero al asignar ese valor a la variable cVal, cVal siempre es 0.

Por qué?
Responder Con Cita
  #2  
Antiguo 11-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
procedure TMasterObject.ComboBox1Exit(Sender: TObject);
var
   cVal : Text;
begin
  cVal := ComboBox1.Text;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 11-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Acabo de releer tu pregunta y no veo muy claro lo que quieres, te añado este otro código para ver si van por ahí los tiros:

Código Delphi [-]
 procedure TForm1.ComboBox1Change(Sender: TObject);
 begin
 ShowMessage(Combobox1.Items[ComboBox1.ItemIndex]);
 end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 11-10-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
itemIndex devuelve el indice del valor seleccionado en el combobox, el cual es unico en cada corrida de una funcion (no puede ser dos y tres al mismo tiempo). Eso indica que siempre que corres ese procedure, esta seleccionado el primer item del combo. No?
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #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
Poder: 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
  #6  
Antiguo 11-10-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Para evitar el problema que comentas, podrías deshabilitar el evento onDataChange, cuando cambias el comboBox.

Código Delphi [-]
procedure TMasterObject.ComboBox2Exit(Sender: TObject);
begin
  DataSource.onDataChange := nil;
  IBQuery1.Edit;
  IBQuery1DIVISIONTYPE.Value := ComboBox2.ItemIndex;
  IBQuery1.Post;
  DataSource.onDataChange := DataSource1DataChange;
end;

un saludo
Responder Con Cita
  #7  
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
Poder: 21
gluglu Va por buen camino
Muchas gracias, así funciona.

No obstante, me queda la duda de porqué cVal no adopta el valor correspondiente. Entiendo que es porque la variable cVal apunta a la posición de la memoria donde se almacena el valor de ComboBox2.ItemIndex.

Por eso mi pregunta de como podría almacenar el valor correspondiente de la selección en esa variable? Pregunto, debería declararla como cVal : const;?
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


La franja horaria es GMT +2. Ahora son las 18:26:42.


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