Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TComboBox (https://www.clubdelphi.com/foros/showthread.php?t=39390)

calogero 18-01-2007 17:33:28

TComboBox
 
Hola que tal..

Necesito dejar coloreado el ultimo item seleccionado de un TComboBox, esto es que cuando se abra la lista desplegable del combo el item que estaba en la propiedad text del combo se coloree en esa lista que se abre..

Buscando aqui en el foro encontré que tenia que asignar a la propiedad Style del TComboBox el valor csOwnerDrawFixed y después podia escribir el código correspondiente en el evento DrawItem del TComboBox y asi lo hice pero el funcionamiento no es el esperado, le cambié el color al item dentro del evento DrawItem, pero el resultado es que no me colorea nada, cuando se abre la lista desplegable, tampoco me muestra los items.

Cualquier ayuda u orientación se agradece.

P.D. si he estado buscando en el google y en el iternet y aqui en los foros sobre este tema, pero los dias pasan y ya necesito hacer esto, si alguien quiere ayudar adelante se agradece.

Bicho 18-01-2007 17:46:36

Hola, pos no lo entiendo, yo lo he probado y me funciona

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ComboBox1: TComboBox;
    procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure ComboBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  LastSelect : Integer;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var bTemp:TBitmap;
begin
  bTemp := TBitmap.Create;

  with (Control as TComboBox) do begin
    if Index = LastSelect then Canvas.Brush.Color := $00CCCC;

    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left,Rect.Top,Items[Index]);
    Canvas.Draw(Rect.Left + 2,Rect.Top + 2,bTemp);
  end;
  bTemp.Free;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  LastSelect := ComboBox1.ItemIndex;
  Edit1.Text := ComboBox1.Items.Strings[LastSelect];
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LastSelect := -1;
end;

end.

Saludos

calogero 18-01-2007 19:04:48

TComboBox
 
Hola que tal..

Gracias por tu ayuda Bicho, la verdad que si habia estado batallando algo, creo que tu codigo me va servir, no conocía esa propiedad lastSelect y la verdad que no se me ocurrió buscarla... a veces te enfrascas en el codigo y se te nubla la mente.

Bueno hasta luego y gracias otra vez...

Bicho 18-01-2007 23:55:01

Hola,

Cita:

Empezado por calogero
no conocía esa propiedad lastSelect y la verdad que no se me ocurrió buscarla...

No es una propiedad, sino una variable, si te fijas está declarada en la sección var
Código Delphi [-]
var
  Form1: TForm1;
  LastSelect : Integer;

implementation

Y claro, si necesitas dejar marcado un valor en el combobox, necesitarás saber que item es, para ello al seleccionar un item del combo lo asignamos a la variable.
Luego en el OnDrawCell leemos, si el item actual que se está pintando es el seleccionado, si es así, lo pintamos.
No tiene más historia.

Bueno, espero te sirviera.

Saludos

calogero 19-01-2007 00:50:07

TComboBox
 
Claro tienes razón no es una propiedad sino una variable.. estoy seguro que si me va a servir aunque todavia no lo implemento. Bueno gracias por tu ayuda.

calogero 19-01-2007 17:20:20

TComboBox
 
Que tal Bicho..

Funciona muy bien tu ejemplo pero, tiene un detalle, cuando abres la lista desplegable del combo y te desplazas, por los items, con las flechitas te va coloreando los items y eso no debería suceder, trataré de resolverlo... solo quería que lo supieras aunque creo que ya lo sabías.


La franja horaria es GMT +2. Ahora son las 17:36:47.

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