Hvordan kan man lage så man kan skrive et ""-tegn for å endre farge på teksten i et konsoll program?
Jeg bruker nå følgende kode for å endre farge :
procedure Write_cl(NewLine: Boolean; Color: Integer; Text: String);
procedure SetColor(Color: Integer);
var
H: HWND;
begin
H := GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H, Color);
end;
begin
SetColor(Color);
if NewLine then
Writeln(Text)
else
Write(Text);
end;
Ex. for å skrive "Blå - Rød" ("Blå" = blå farge, "-" = grå(normal) osv...):
Write_cl(False, 9, 'Blå'); // blå tekst
Write_cl(False, 7, ' - '); // normal (grå)
Write_cl(False, 12, 'Rød');// rød tekst
Det jeg ønsker er å kunne bruke dette for å endre farge :
Write_cl(True, '9Blå tekst! 7- 12Rød tekst!');
>Bare si ifra hvis det er noen spørsmål eller om det er for lite UP.
Hjertelig hilsen
DiZpel
[Redigeret d. 05/03-04 21:25:42 af DiZpel]
Hej,
Du kan evt. definere dine farver som konstanter og bruge dem når du skal skrive din streng:
const
cRed = #12;
cBlue = #9;
cGray = #7;
cDefault = cGray;
procedure Test;
begin
Write_cl(True, clBlue+'9Blå tekst! '+clDefault+'7- '+clRed+'12Rød tekst!');
// kan også se sådan her ud:
Write_cl(True, #9+'9Blå tekst! '+#7+'7- '+#12+'12Rød tekst!');
end;
eller du kan lave din egen funktion som kan parse en streng og indsætte de rigtige ascii værdier:
function ParseStr(AFormatStr : String) : String;
var
bEscaped : Boolean;
I : Integer;
begin
Result := '';
bEscaped := False;
I := 1;
while I <= Length(AFormatStr) do
begin
if (bEscaped) then
begin // Vi har allerede fundet escape, så se hvad den skal
// konverteres til.
case (AFormat[I]) of
'\\': // vores escape karakter.
Result := Result+'\\'; // "\\\\" -> "\\"
'r': // Rød
Result := Result+#12; // "\\r" -> Rød
'b': // Blå
Result := Result+#9; // "\\r" -> Blå
'a', // Grå (Gray)
'd': // Default (Grå)
Result := Result+#7; // "\\a" eller "\\d" -> Grå
// Her skal du selv sætte resten af dine farvekoder ind....
else
Result := Result+AFormatStr[I];
end;
bEscape := False;
end
else
begin // Vi er ikke i escape mode..
if (AFormat[I] = '\\') then
bEscape := True
else
Result := Result+AFormatStr[I];
end;
Inc(I);
end;
end;
procedure Test;
begin
Write_cl(True, ParseStr('\\b9Blå tekst! \\d7- \\r12Rød tekst!'));
end;
Jeg har skrevet koden ind direkte, så check den lige for evt. fejl :-)
Håber det hjælper.
/Michael.