home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* VGACOLOR.INC *)
- (* Include-Datei zu PAL-EDDI.PAS für VGA-Karten *)
- (* Turbo Pascal Version 5.5 *)
- (* (c) 1990 Gerald Arend & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- TYPE
- RGBRec = RECORD
- RedVal, GreenVal, BlueVal: BYTE;
- END;
-
- CONST { Die Standardfarben }
- VGAFarben: ARRAY[0..MaxColors] OF RGBRec =
- ((RedVal: $00; GreenVal: $00; BlueVal: $00),
- (RedVal: $00; GreenVal: $00; BlueVal: $3F),
- (RedVal: $09; GreenVal: $3F; BlueVal: $09),
- (RedVal: $00; GreenVal: $3F; BlueVal: $3F),
- (RedVal: $3F; GreenVal: $05; BlueVal: $05),
- (RedVal: $2C; GreenVal: $00; BlueVal: $3F),
- (RedVal: $1C; GreenVal: $12; BlueVal: $00),
- (RedVal: $31; GreenVal: $31; BlueVal: $31),
- (RedVal: $0D; GreenVal: $0D; BlueVal: $0D),
- (RedVal: $00; GreenVal: $00; BlueVal: $1C),
- (RedVal: $00; GreenVal: $1C; BlueVal: $00),
- (RedVal: $00; GreenVal: $1C; BlueVal: $1C),
- (RedVal: $1C; GreenVal: $00; BlueVal: $00),
- (RedVal: $1C; GreenVal: $00; BlueVal: $1C),
- (RedVal: $3F; GreenVal: $3F; BlueVal: $09),
- (RedVal: $3F; GreenVal: $3F; BlueVal: $3F));
-
- VAR
- FarbWert: LONGINT; { Nummer der Farbe von 1 bis 262.144 }
- SchriftY: ARRAY[1..3] OF INTEGER;
- Step: BYTE;
- StepX, StepY, WertX, WertY: INTEGER;
- Ende: BOOLEAN;
- THoehe, TBreite: WORD;
-
- PROCEDURE DrawBars; { Farbbalken und Info erzeugen }
- VAR
- n: BYTE;
- s: STRING[6];
- BEGIN
- SetFillStyle(SolidFill, MaxColors);
- Bar(0, 0, GetMaxX, 2*TextHeight('X')-1);
- SetTextStyle(DefaultFont, HorizDir, 1);
- SetTextJustify(CenterText, TopText);
- SetColor(0);
- OutTextXY(GetMaxX DIV 2, 2, 'toolbox Pal-Eddi '+
- 'VGA-Modus 640 x 480, 16 Farben aus einer '+
- 'Palette von 262.144');
- SetTextJustify(LeftText, BottomText);
- SetColor(MaxColors);
- SetWriteMode(XORPut);
- TBreite:=TextWidth('X');
- THoehe:=TextHeight('X');
- SchriftY[1]:=GetMaxY div 2+7*THoehe;
- SchriftY[2]:=GetMaxY div 2+10*THoehe;
- SchriftY[3]:=GetMaxY div 2+13*THoehe;
- OutTextXY(0, SchriftY[1]-3*THoehe, 'Nr.');
- OutTextXY(0, SchriftY[1], 'Rot');
- OutTextXY(0, SchriftY[2], 'Grün');
- OutTextXY(0, SchriftY[3], 'Blau');
- OutTextXY(0, GetMaxY-6*THoehe,
- '<r> <g> <b> Farbwert erhöhen');
- OutTextXY(0, GetMaxY-4*THoehe,
- '<R> <G> <B> Farbwert erniedrigen');
- OutTextXY(GetMaxX DIV 2, GetMaxY-4*THoehe,
- '<C> Color-Cycling-Demo');
- Str((LONGINT(VGAFarben[0].RedVal)*4096+
- VGAFarben[0].GreenVal * 64 +
- VGAFarben[0].BlueVal):6, s);
- WertX:=10*TBreite;
- WertY:=GetMaxY-10*THoehe;
- OutTextXY(0, WertY, 'Farbwert: '+s);
- Step:=1;
- StepX:=GetMaxX DIV 2+13*TBreite;
- StepY:=GetMaxY-6*THoehe;
- OutTextXY(GetMaxX DIV 2, StepY,
- 'Schrittweite: <+> / <->');
- ShowValue(StepX, StepY, Step, 3);
- FOR n:=0 TO MaxColors DO
- BEGIN
- SetColor(MaxColors);
- Str(n:2, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[1]-3*THoehe, ' #'+s);
- Str(VGAFarben[n].RedVal:4, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[1], s);
- Str(VGAFarben[n].GreenVal:4, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[2], s);
- Str(VGAFarben[n].BlueVal:4, s);
- OutTextXY(Succ(n)*GetMaxX DIV (MaxColors+2),
- SchriftY[3], s);
- SetColor(n);
- SetFillStyle(SolidFill, n);
- Bar(Succ(n)*GetMaxX DIV (MaxColors+2), 2*THoehe,
- (n+2)*GetMaxX DIV (MaxColors+2), GetMaxY div 2);
- END;
- END;
-
- PROCEDURE InitPalette; { Palette setzen }
- VAR
- n: BYTE;
- BEGIN
- FOR n:=0 TO MaxColors DO
- BEGIN
- { Erst den Farbwert in der Palette
- gleich der Palettennummer setzen... }
- SetPalette(n, n);
- { ... und dann erst die RGB-Palettenwerte eintragen ! }
- WITH VGAFarben[n] do
- SetRGBPalette(n, RedVal, GreenVal, BlueVal);
- END;
- END;
-
- PROCEDURE ChangeColors; { Farben interaktiv verändern }
- VAR
- x: INTEGER;
- n: BYTE;
- ch: CHAR;
- BEGIN
- n:=0;
- Ende:=FALSE;
- SetColor(MaxColors);
- DrawFrame(n, SchriftY[3]+10);
- REPEAT
- x:=Succ(n)*GetMaxX DIV (MaxColors+2)+TBreite;
- ch:=ReadKey;
- CASE ch OF
- #0: BEGIN
- DrawFrame(n, SchriftY[3]+10);
- ch:=ReadKey;
- CASE ch OF
- #75: Add(n, 0, MaxColors, -1, TRUE); { <- }
- #77: Add(n, 0, MaxColors, 1, TRUE); { -> }
- END;
- DrawFrame(n, SchriftY[3]+10);
- END;
- 'r': BEGIN
- { Farbwert verändern }
- Add(VGAFarben[n].RedVal, 0, 63, Step, TRUE);
- { Neuen Wert anzeigen }
- ShowValue(x, SchriftY[1],
- VGAFarben[n].RedVal, 3);
- END;
- 'g': BEGIN
- Add(VGAFarben[n].GreenVal, 0, 63, Step, TRUE);
- ShowValue(x, SchriftY[2],
- VGAFarben[n].GreenVal, 3);
- END;
- 'b': BEGIN
- Add(VGAFarben[n].BlueVal, 0, 63, Step, TRUE);
- ShowValue(x, SchriftY[3],
- VGAFarben[n].BlueVal, 3);
- END;
- 'R': BEGIN
- Add(VGAFarben[n].RedVal, 0, 63, -Step, TRUE);
- ShowValue(x, SchriftY[1],
- VGAFarben[n].RedVal, 3);
- END;
- 'G': BEGIN
- Add(VGAFarben[n].GreenVal, 0, 63, -Step, TRUE);
- ShowValue(x, SchriftY[2],
- VGAFarben[n].GreenVal, 3);
- END;
- 'B': BEGIN
- Add(VGAFarben[n].BlueVal, 0, 63, -Step, TRUE);
- ShowValue(x, SchriftY[3],
- VGAFarben[n].BlueVal, 3);
- END;
- '+': BEGIN { Schrittweite erhöhen }
- Add(Step, 1, 8, 1, TRUE);
- ShowValue(StepX, StepY, Step, 3);
- END;
- '-': BEGIN { Schrittweite vermindern }
- Add(Step, 1, 8, -1, TRUE);
- ShowValue(StepX, StepY, Step, 3);
- END;
- 'c',
- 'C': BEGIN
- CycleDemo;
- Exit;
- END;
- #27: BEGIN
- Ende:=TRUE;
- Exit;
- END;
- END;
- { Farbwert aus den einzelnen RGB-Werten zusammenbauen }
- FarbWert:=
- LONGINT(VGAFarben[n].RedVal)*4096+
- VGAFarben[n].GreenVal*64 +
- VGAFarben[n].BlueVal;
- ShowValue(WertX, WertY, FarbWert, 6); { Wert anzeigen }
- WITH VGAFarben[n] DO { Palettenwert neu setzen }
- SetRGBPalette(n, RedVal, GreenVal, BlueVal);
- UNTIL FALSE;
- END;
- (* ------------------------------------------------------ *)
- (* Ende von VGACOLOR.INC *)