Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

duduml

Preencher Combobox com cores do sistema??

Mensagens Recomendadas

duduml

Bom dia pessoal!

Bem, a questão de hoje é "simples" (se fosse cá não estava :thumbsup: )...

O que pretendo é preencher uma combobox com as cores que o vb.net disponibiliza...ou seja, se escrevermos backcolor.(aparecem as cores), eu quero que essas cores sejam adicionadas a combobox...

Eu já pesquisei na net, mas o que encontro é inserir 2 ou três cores dizendo explicitamente quais...:S

NOTA: eu quero que apareçam o nome das cores...(para já :P )

Obrigado!

Cumprimentos!


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCerqueira

Não sei se é isto que queres, mas podias escrever manualmente a cor no item 'Collection' da combo.

E quando for mudado o nome da cor, mudava o fundo da combo.

O grande trabalho é só mesmo escrever manualmente o nome das cores.  :bored:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCerqueira

Podes também usar um color dialog.

Eu não estou a perceber exactamente o que queres, por isso é que não estou a conseguir ajudar-te muito bem  :bored:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

O que queria era preencher com um ciclo a combobox, com as cores do sistema...depois ao ser seleccionado cada um tenho um exemplo de como ficaria...

essa ideia do coleection é boa, mas la está, não queria preencher a unha.... :thumbsup:

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Fiz te um exemplo para veres numa listview.

Adiciona uma listview, com view "details", a um form vazio e mete isto no form load:

        ListView1.Columns.Add("Cores", ListView1.Width - 35)

       Dim NomesCor As String() = [Enum].GetNames(GetType(KnownColor))

       For Each NomeCor As String In NomesCor
           Dim LVI As New ListViewItem
           LVI.Text = NomeCor

           Dim CorActual As Color = Color.FromName(NomeCor)
           Dim CorInversa As Color = Color.FromArgb(255 - CorActual.R, 255 - CorActual.G, 255 - CorActual.B)

           LVI.BackColor = CorActual
           LVI.ForeColor = CorInversa
           ListView1.Items.Add(LVI)
       Next

Se tiveres dúvida em alguma linha, não estou cá para outra coisa ;)

Antecipando qualquer coisa, calculo a cor inversa apenas para garantir que a cor do texto que tem os nomes não fica igual à cor de fundo, e consequentemente não se ver.

(esse cálculo não se safa do 255-128, e caso exista alguma cor 128,128,128 o texto fica da mesma cor)

EDIT: É fácil de adaptares isso a uma combobox. Foca-te naquilo que o código faz.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

Ribeiro55, muito obrigado!!!

Estou-te extremamente grato!

Vou agora tentar implementar... :P

já digo algo... :thumbsup:

Cumprimentos


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

Bem, já cá estou... :fartnew2:

a dúvida é na primeira linha

cmb_fundo.Items.Add("Cores", cmb_fundo.Width - 35) 'Como coloco aqui????

       Dim NomesCor As String() = [Enum].GetNames(GetType(KnownColor))

       For Each NomeCor As String In NomesCor
           Dim LVI As New ListViewItem
           LVI.Text = NomeCor

           Dim CorActual As Color = Color.FromName(NomeCor)
           Dim CorInversa As Color = Color.FromArgb(255 - CorActual.R, 255 - CorActual.G, 255 - CorActual.B)

           LVI.BackColor = CorActual
           LVI.ForeColor = CorInversa
           cmb_fu

O resto, percebo mais o menos...se tiver dúvidas, já te venho chatiar... ;):P

Obrigado =D

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

, cmb_fundo.Width - 35 é um parâmetro da coluna da ListView.

Para a combobox esquece essa linha.

E podes também esquecer o back e forecolor, pelo menos de maniera linear.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

ok :P

Fico com a tua maneira :thumbsup:

Obrigado!

Vou então implementar isto...e por tudo lindo..xD

Depois digo algo...:)

Cumprimentos,

e obrigado a todos! especialmente ao ribeiro55 :)


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

Como faço para que ao seleccionar uma cor, passar apenas o nome da cor para uma variável???

tenho isto:

fundos = Me.cmb_fundo.SelectedItems

:/

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

já vi que vou ter de inventar....

adicionei duas colunas em vez de uma....mas...Como faço para que adicionar o nome, e a cor em separado?? e depois, como faço para passar só o valor da cor ao seleccionar??

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não estou a perceber o que pretendes.

A linha de código que lá tens não faz sentido.

Explica-te melhor.

Já agora, não faças "posts" duplos.

O que disseste no segundo "post" podia ser perfeitamente complementado no primeiro.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

é assim, pretendo dar ao utilizador a opção de definir o seu ambiente gráfico, assim, o que pretende é que ele escolha as cores, e o nome dessa cor seja passado para uma variável (depois tenho em todos os forms definido de maneira que a alteração do nome da cor altera a cor)

por exemplo, se escolher vermelho, a variável fundo fica com o valor red, e depois tenho isto em todos os forms;

me.backcolor = fundo

Só que agora percebi todas as linhas de código que me deste, e a string passada que define a cor, não serve para o que quero.. :thumbsup:

Tens alguma sugestão??

o meu form:

1072wkl.png

PS: não ligues à primeira listview, estive a inventar... :)

e desculpa, agora já sei que devo editar os post para não haver "duplicados" :P

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Olha com olhos de ver para o código que te dei.

Como é que eu transformo o nome da cor em cor para a variável CorActual?

Me.BackColor = Color.FromName(fundo)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

pois,  😳 já vi...  :dontgetit:

Obrigado!

Vou ver se me safo agora...  😎

mas já experimentei, e não.. deu :P

É mesmo com o slectedItem??

CUMPS

EDIT:

Ele passa-me as cores todas...:S

tenho isto (mas já tentei de 1001 maneiras):

 Private Sub cmb_fundo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_fundo.SelectedIndexChanged
        fundos = cmb_fundo.BackColor
        cores()
    End Sub

O erro é aqui:

 ex_fundo.BackColor = Color.FromName(fundos) 

Cumprimentos


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCerqueira

Ribeiro, eu não experimentei o teu código, por isso não sei se estás a fazer isto ou não, mas o que ele quer é importar as cores do sistema para a combo; Penso que depois de conseguir isso, ele consegue fazer o que pretende.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

é assim, elas são exportadas...mas faz uma especie de "parse" a cor para transforma-la em código....mas ao tentar converter esse código para os nomes propriamente ditos, sou mal sucedido..:S ;)

Mas não há nada como experimentares... XD se me fizesses esse favor, ficar-te-ia grato! =D

Cumprimentos


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCerqueira

Vou tentar saber, mas diz-me uma coisa, sobre o print que mandaste...

Não é assim que queres?  Aparecer a cor e nome na combo? :bored:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

sim, quero...

mas eu estava a experimentar...;)

mas ao o utilizador escolher uma cor, quero que passe para a variavel o valor e mostrar no exemplo ao lado...(mas isso é comigo...xD) se me ajudares na parte de meter a cor na variavel de maneira a puder ser usada, é quanto basta!!!

Depois só tenho que passar para um ficheiro ou mesmo para a BD, e ao iniciar o programa, fazer o load disso...:) mas vou fazer num ficheiro, é mais simples e chega bem... :P

Obrigado!

Cumps


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

eu tenho para mudar o background, outra opção para os botões, textbox... e outra para o texto que está dentro dos botooões e das textbox...

porque??

EDIT: pensei melhor e vou guardar na BD, associado ao utilizador, assim cada um poderá ter ao seu gosto... ;):)

hihi

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PCerqueira

Páw, se quiseres ter as tuas definições para cada utilizador vais ter de gravar isso num .cfg, se não me engano.

Eu já fiz isso uma vez, mas já não me lembro  🤔

EDIT: Mas se quiseres fazer isso de forma 'temporária', escusas de guardar na BD, fazes isso no momento.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

na...

nada disso...por exemplo, se eu conseguir obter apenas o nome da cor e coloca-la na respectiva variável, basta ter a tabela com 4 campos: fundo; texto; afins; nick;  e guardar la os valores como deve ser...

depois, ao fazer login, vou buscar atraves do nick (que é único, obvio) as cores escolhidos por esse utilizador...:) se não tiver cores escolhidas, fica por defeito...:P

nada de complicado...

Apenas o facto de ficar com o nome das cores na variavel está a ser complicado...

Agradecia imenso esta ajuda...

EDIT:

EDIT: Mas se quiseres fazer isso de forma 'temporária' escusas de guardar na BD, fazes isso no momento.

Sim, isso enquanto o programa corre é facílimo...mas guardar as definições também é...

mas pronto, la esta a tal coisa...não consigo guardar o nome!!!

Cumps


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.