Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Colocar los nombre de los colores en español en un Combobox (https://www.clubdelphi.com/foros/showthread.php?t=84697)

novato_erick 24-11-2013 19:47:50

Colocar los nombre de los colores en español en un Combobox
 
Hola Chicos como están?

Agradeciéndoles antemano la colaboración prestada en este foro y tratando de encontrar solución planto este interrogante:

en un link encontre esto que necesitaba:

http://delphi.about.com/od/vclwritee.../aa061104a.htm

Sin embargo me encontré que los usuarios de mi aplicación no son Bilingue :confused: asi que tengo que mostrar los colores en español:

Este es el código que extraje del link:

Código Delphi [-]
//Tengo esta constante en mi formulario
const Colors: array[0..17] of TColor =
 (clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen, clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite,  clYellow) ;

//ahora en el evento OnDrawItem del ComboBox llamado cbxColor1 Puse esto:

procedure TFrmIngresarArticulo.cbxColor1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
cName: string;
begin
 if odSelected in State then
   (Control as TComboBox).Canvas.Brush.Color := clHighlight
 else
   (Control as TComboBox).Canvas.Brush.Color := clWhite;

 (Control as TComboBox).Canvas.FillRect(Rect);

 cName:=ColorToString(Colors[Index]);
 Delete(cName,1,2); //removes cl from clColorName

 with (Control as TComboBox).Canvas do
 begin
  TextOut(Rect.Left + 24,Rect.Top, cname);
  Brush.Color := TColor(Colors[Index]);
  Rectangle(Rect.Left + 1,Rect.Top + 1,Rect.Left + 21,Rect.Bottom - 1);
 end;
end;

//Nota aclaro que tengo que poner en la propiedad del combobox lo siguiente: csOwnerDrawFixed

en realidad no se me ocurre utilizando este código obtener lo que deseo:

Código Delphi [-]
Azul := clBlue;

Alguna idea?


Saludos

novato_erick

ecfisa 24-11-2013 23:24:23

Hola.

Creo que tendrías que crear otro arreglo constante con la traducción de los nombres.

Un ejemplo:
Código Delphi [-]
const
  SPACOL: array[0..17] of string = ('Agua','Negro','Azul','Gris oscuro',
    'Fucsia','Gris','Verde','Lima','Gris claro','Marrón','Azul marino',
    'Verde oliva','Púrpura','Rojo','Plateado','Cerceta','Blanco','Amarillo');
  ENGCOL: array[0..17] of TColor = (clAqua, clBlack, clBlue, clDkGray,
    clFuchsia, clGray, clGreen, clLime, clLtGray, clMaroon, clNavy,
    clOlive, clPurple, clRed, clSilver, clTeal, clWhite,  clYellow);

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  with ComboBox1 do
  begin
    Style:= csOwnerDrawFixed;
    for i:= 0 to 17 do AddItem(SPACOL[i], TObject(ENGCOL[i]));
  end;
end;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TComboBox do
  begin
    if odSelected in State then
      Canvas.Brush.Color:= clHighlight
    else
      Canvas.Brush.Color:= clWhite;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 24, Rect.Top, SPACOL[Index]);
    Canvas.Brush.Color:= TColor(Items.Objects[Index]);
    Canvas.Rectangle(Rect.Left + 1, Rect.Top + 1, Rect.Left + 21, Rect.Bottom - 1);
  end;
end;

// Aplicar color seleccionado a un TPanel
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   with TComboBox(Sender) do
     if ItemIndex <> -1 then
       Panel1.Color:= TColor(Items.Objects[ItemIndex]);
end;

Saludos :)

novato_erick 25-11-2013 00:18:54

ecfisa

v:-)v

Es lo que necesitaba Muchassss gracias... al final en utilizar el color seleccionado solo agregué esto porque no lo mostraba en modo de ejecucion:

Código Delphi [-]
// Aplicar color seleccionado a un TPanel
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   with TComboBox(Sender) do
     if ItemIndex <> -1 then
      begin//aqui agregue
       Panel1.Color:= TColor(Items.Objects[ItemIndex]);
      end;//y el final
end;

Funcionó correctamente.....

y nuevamente v:-)v

nlsgarcia 25-11-2013 00:56:43

novato_erick,

Cita:

Empezado por novato_erick
...solo agregué esto porque no lo mostraba en modo de ejecución... :confused:

El código del Msg #2 funciona correctamente y sin ninguna modificación en Delphi 7 bajo Windows 7 Professional x32.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 11:51:11.

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