Avatar billede vlamik Nybegynder
01. august 2000 - 21:27 Der er 10 kommentarer og
1 løsning

Hexkode

Hej -

Nu har jeg lavet en kode der kan omdanne en farve fra en ColorDialog til en HEX value. Problemt er at koden er spejlvendt - ?? Kan jeg måske invetere farven før jeg konverterer den til HEX, eller hvad?? Her er koden:

if (ColorDialog1->Execute()) {
char Buffer[80];
sprintf( Buffer, \"#%06X\", ColorDialog1->Color );
Edit1->Text = Buffer;
}

Please help !!

Mvh

Mikkel

Avatar billede ultik Nybegynder
01. august 2000 - 22:58 #1
jeg havde samme problem med et andet programmeringssprog engang, VB tror jeg, jeg lavede en funktion der simpelthen tog bogstaverne en af gangen og satte dem de rigtige steder i en ny streng som så skulle returneres
Avatar billede ultik Nybegynder
01. august 2000 - 22:59 #2
altså blev position :
6 til 1,
5 til 2,
4 til 3,
3 til 4,
2 til 5
og 6 til 1.....
Avatar billede vlamik Nybegynder
02. august 2000 - 11:35 #3
Men?? Hvordan gør jeg det?
Avatar billede jpk Nybegynder
02. august 2000 - 12:48 #4
Det samme problem får man hvis man vil bruge Windows\' ColorDialog i en DirectX
-app! DirectX gemmer nemlig farveinformationen i rækkefølgen BGR istedet for RGB...
Du kan bruge følgende makro:
#define BGR2RGB(c) (((c & 0xff0000) >> 16) + (c & 0xff00) + (c  << 16))

Jacob
Avatar billede vlamik Nybegynder
03. august 2000 - 19:06 #5
Hvordan skal jeg bruge denne macro?? Hvor skal jeg sætte den? Sådan her måske:

if (ColorDialog1->Execute()) {
char Buffer[80];
sprintf( Buffer, \"#%06X\", ColorDialog1->Color );
#define BGR2RGB(c) (((c & 0xff0000) >> 16) + (c & 0xff00) + (c  << 16))
BGR2RGB(Buffer);
Edit1->Text = Buffer;
}

Men så får jeg en fejlmeddelelse:

Invaild pointer addition, eller sådan noget i den retning.

Avatar billede ultik Nybegynder
03. august 2000 - 19:18 #6
sæt macroen i toppen, lige efter dine

#include

linier, og brug den så ligesom en funktion
BGR2RGB(Buffer)
Avatar billede jpk Nybegynder
03. august 2000 - 19:20 #7
Du skal bruge makroen på samme måde som en funktion.
Den kan evt. placeres i toppen af din fil.

Når du har en farve du gerne vil have ændret, kalder du makroen med farven som argument.

Altså hvis din ColorDialog har farven i COLORREF-format:

COLORREF col = ColorDialog1->Color;
BGR2RGB(col);

Så er farverne R og G byttet om og du kan lave din formatering (sprintf(...))
Avatar billede vlamik Nybegynder
04. august 2000 - 13:42 #8
Jeg ved ikke hvad der er galt, men koden er stadig spejlvendt, måske er min farve ikke i COLORREF format, men hvad for nogle andre formater er der?? Her er min kode:

(i toppen af min kode, ved mine #include...)
#define BGR2RGB(c) (((c & 0xff0000) >> 16) + (c & 0xff00) + (c  << 16))

(Her er resten)
if (ColorDialog1->Execute()) {
COLORREF Hexcolor = ColorDialog1->Color;
BGR2RGB(Hexcolor);
char Buffer[250];
sprintf( Buffer, \"#%06X\", Hexcolor );
Edit1->Text = Buffer;
}
Avatar billede jpk Nybegynder
04. august 2000 - 14:12 #9
Hmm...
Hvilken type er din ColorDialog? Jeg synes ikke jeg kan finde en std. Colordialog i Online Books...

Hvilket udviklingsmiljø bruger du? Jeg kan stærkt anbefale VC++ 6.0
Hvis du anvender MFC, kan du bruge CColorDialog-klassen, der virker ovenstående!

Kan du ikke finde ud af hvilken type din ColorDialog returnerer, og hvordan farverne er lagret heri?
Avatar billede vlamik Nybegynder
04. august 2000 - 22:02 #10
Jeg har C++ Builder 3 og har en TColorDialog mere kan jeg ikke sige. Jeg har prøvet at kigge i hjælp men nej... Ingenting om TColorDialog!
Avatar billede devia Nybegynder
05. august 2000 - 16:11 #11
Du kunne også bare bruge strrev()
char * strrev(char *);

f.eks.
...
char txt[]=\"1234\";
strrev(txt);
puts(txt);  //udskriver \"4321\"
...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester