P> No desenvolvimento do software de análise de valores mobiliários, geralmente é necessário desenhar uma curva analítica para vários estoques. Para tornar as funções do software mais convenientes e flexíveis, os usuários esperam poder personalizar as cores de várias curvas de acordo com suas preferências. Existem funções semelhantes na caixa de diálogo Fonte no menu [formato] do Word97. Quando o usuário clica na caixa suspensa de cores na caixa de diálogo Fonte, padrões simples de várias cores são exibidos juntamente com os nomes de cores das fontes. com um nome de cor. 1. Implementação da caixa de diálogo colorida personalizada
Em Delphi, podemos usar o TCombobox para obter funcionalidade semelhante. Existe um atributo de estilo no componente TCOMBOBOX, que determina o atributo de exibição do TCombobox. Geralmente, CSDROPDOWN, CSSIMPLE, CSDROPDOWNLIST, CSOWNERDRAWFIXED, CSOWNERDRAVARIABLE, etc. podem ser selecionados. Quando o CSOWNERDRAWFIXED é selecionado, significa criar uma caixa suspensa auto-desenhada. E o processo de pintura de auto-pintura deve ser respondido no evento OnDrawItem do TCombobox. OnDrawItem é definido como:
PropertyondrawItem: TdrawItemEvent;
TDRAWITEMEVENT = Procedimento (Controle: Twincontrol; Índice: Integerrect: Trect; Estado: TownerDrawState) OfObject;
O significado de três parâmetros é:
Controle: TCombobox contendo caixa suspensa
ÍNDICE: O número de índice da caixa suspensa auto-desenhada na propriedade de itens do TCombobox
Rect: A posição de auto-desenho, portanto, conhecemos a posição do retângulo que precisa ser auto-desenhado (parâmetro RECT) e o número do índice (parâmetro de índice) no TCombobox, podemos usar a propriedade Canvas do TCombobox para se basear sua tela. O processo de implementação específico é o seguinte:
1. Crie um novo arquivo de projeto e defina as propriedades relevantes de seu formulário padrão como:
Legenda caixa suspensa personalizada
Nome Form1
POSICEPOSCREENCENTER
2. Coloque dois componentes TCombobox no formulário e defina suas propriedades da seguinte forma:
NamestyleitemHeightOndrawItem
ColorCOMBO1CSOWNERDRAWFIXED 20COLORCOMBODRAWITEM
ColorCOMBO2CSOWNERDRAWFIXED 30COLORCOMBODRAWITEM
3. Clique duas vezes no botão DOT ao lado das propriedades dos itens do Colorcombo1 e ColorCombo2 e insira-o na caixa de diálogo StringListoritor.
preto
azul
Azul e verde
Verde brilhante
vermelho
amarelo
Nomes de várias cores
4. No evento OnDrawItem em ColorCombo1, Yu Manlu?
ProcedureTform1.ColorComBodrawItem (Control: Twincontrol; Índice: Inteiro; Rect: Trect; Estado: ProprietárioDState);
var
Tempcolor: tcolor; // cor de imagem
Tempbrushcolor: tcolor;
Começar
com (ControlastComBobox) sim
// Desenhe -o na tela do combo
Começar
Tempbrushcolor: = canvas.brush.color;
// salve a cor original
Canvas.fillrect (ret);
caseIndexOF // define diferentes cores auto-pintadas de acordo com o índice
0: // preto
Tempcolor: = clblack;
1: // azul
Tempcolor: = clblue;
2: // azul e verde
Tempcolor: = claqua;
3: // Verde brilhante
Tempcolor: = cllime;
4: // vermelho
Tempcolor: = clred;
5: // Amarelo
Tempcolor: = clyellow;
// A resposta a outras cores pode ser adicionada aqui.
fim;
Canvas.brush.color: = tempcolor;
// retângulo de cor autodesses
Canvas.rectangle (ret.left+4,
Ret.top+1,
(Rect.right+ret.left) div3,
Ret.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// Mostra a string correspondente à cor
Canvas.textout ((ret.left+ret.right) div2,
Ret.top+1,
Itens [índice]);
fim;
fim;
5. Salvar e executar o arquivo, podemos ver o mesmo efeito que a caixa suspensa cor na palavra
Os leitores interessados podem adicionar outras cores aos locais mostrados no artigo.
O programa acima é passado no Delphi3.0, 4.0. 2. Escreva componentes de diálogo coloridos personalizados
Para muitos programadores Delphi, não é familiar para escrever seus próprios componentes Delphi. Abaixo, apresentaremos a escrita de componentes usando a caixa de diálogo colorida personalizada como exemplo. O seguinte tcolorcombox continua a partir da classe TCOMBOBOX. 1. Selecione a nova opção de componente no item de menu do componente. Selecione TCOMBOBOX Na caixa Ancestortype, preencha o TCOLORCOMBOBOX na caixa ClassName, selecione Amostras na caixa de página da paleta, preencha o ColorCombOBox.Pas na caixa UnitFileName e clique no botão OK.
2. Selecione a opção de instalação do componente no item do menu do componente, clique em Intonewpackage, escreva o caminho e colorCombodpk.dpk na caixa de nome do pacote e clique em OK para gerar o arquivo colorCOMBODPK.BPL.
3. Use ImageEditor no menu Ferramentas para criar o arquivo de arquivo colorcombox.dcr e criar um bitmap para a classe TcolorcombboBox.
4. Adicione as especificações para o tamanho e a altura da fonte e o atributo de estilo do controle (definido como CSOWNERDRAWFIXED) no createWND executado após o Create. cores.
5. Adicione um programa de auto-pintura de cor ao evento DrawItem, que ocorre antes no DrawItem.
O procedimento de implementação é o seguinte:
UnitcolorcomboBox;
interface
usos
Janelas, mensagens, sysutils, aulas,
Gráficos, controles, formulários, diálogos,
Stdctrls;
tipo
Tcolorcombobox = classe (TCombobox)
Privado
{PrivateClarations}
FondrawItem: TdrawItemEvent;
ProcedduzRawItem (Índice: Inteiro; Rect: Trect; Estado: TownerDrawState);
protegido
{ProtectedDeclarations}
público
{PublicDeclarations}
construtorCreate (AOWNER: TCOMPONENT); substituição;
ProcedureCreatewnd; substituir;
publicado
{PublicedDeclarations}
PropertyondrawItem: TdrawItemEvent
ReadfondrawItemwriteFondrawItem;
fim;
Procedureregister;
Implementação
Procedureregister; // Componente de registro
Começar
RegisterComponents (amostras, [tcolorcombobox]);
fim;
constructortColorcombobox.create
(AOWNER: TComponent); // Inicialização do componente
Começar
herdedcreate (awner);
Estilo: = CSOWNERDRAWFIXED;
ItemHeight: = 20;
Font.size: = 10;
fim;
ProcedureTColorcombobox.Createwnd;
// inicialize a propriedade de itens do componente de cores
Começar
herdedcreatewnd;
Items.clear;
Items.add (preto);
Items.add (azul);
Items.add (azul e verde);
Items.add (verde brilhante);
Items.add (rosa);
Items.add (vermelho);
Items.add (amarelo);
Items.add (branco);
Items.add (azul escuro);
Items.add (ciano);
Items.add (verde);
Items.add (roxo);
Items.add (vermelho carmesim);
Item.add (amarelo profundo);
Items.add (cinza escuro);
Items.add (prata);
// Se você não precisar de tantas cores, poderá excluir cores indesejadas no atributo item do componente
fim;
// sobrecarregar o processo DrawItem
ProcedureTColorcombobox.DrawItem (Índice: Inteiro; Rect: Trect; Estado: TownerDrawState);
var
Tempcolor: tcolor; // cor de imagem
Tempbrushcolor: tcolor;
Começar
// As configurações de pintura automática padrão deste componente
Tempbrushcolor: = canvas.brush.color;
// salve a cor original
Canvas.fillrect (ret);
ifitems [index] = preto então
Tempcolor: = clblack
elseiFitems [index] = azul então
Tempcolor: = clblue
elseiFitems [index] = azul verde então
TempColor: = Claqua
elseiFitems [index] = verde brilhante então
Tempcolor: = cllime
elseiFitems [index] = rosa então
Tempcolor: = clfuchsia
elseiFitems [index] = vermelho então
Tempcolor: = clred
elseiFitems [índice] = amarelo então
TempColor: = Clyellow
elseiFitems [index] = branco então
Tempcolor: = clwhite
elseiFitems [index] = azul escuro então
Tempcolor: = clnavy
elseiFitems [index] = ciano então
Tempcolor: = clteal
elseiFitems [index] = verde então
Tempcolor: = clgreen
elseiFitems [index] = roxo então
Tempcolor: = clpurple
elseifitems [index] = Crimson então
Tempcolor: = clmaroon
elseifitems [índice] = amarelo profundo então
TempColor: = Clolive
elseifitems [index] = cinza escuro então
Tempcolor: = clgray
elseiFitems [index] = prata então
elSetempColor: = clsilver;
Canvas.brush.color: = tempcolor;
// retângulo de cor autodesses
Canvas.rectangle (ret.left+4,
Ret.top+1,
(Rect.right+ret.left) div3,
Ret.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// Mostra a string correspondente à cor
Canvas.textout ((ret.left+ret.right) div2,
Ret.top+1,
Itens [índice]);
fim;
final. 3. Uso de componentes de diálogo colorida personalizados
Depois de registrar um componente de cores personalizado, você pode selecionar um componente de cores personalizado na página de amostra do modelo de componente Delphi e não há diferença entre usar o próprio componente de Delphi.