unit unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, ExtCtrls, CCButton, CCGeneral,unit1, Tabs, CCPanel,
  Spin, CCEdit,metafile, CCScrollBar,turbo,registry,spielvar;

type ELoadRegConfig=class(Exception);
type
  TForm2 = class(TForm)
    TabSet1: TTabSet;
    tab0: TCCPanel;
    Label3: TLabel;
    CCPanel2: TCCPanel;
    weiter: TCCButton;
    zurueck: TCCButton;
    Memo1: TMemo;
    CCButton3: TCCButton;
    tab1: TCCPanel;
    tab3: TCCPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    tab4: TCCPanel;
    Label5: TLabel;
    tab5: TCCPanel;
    Label6: TLabel;
    Label7: TLabel;
    CCPanel1: TCCPanel;
    ListBox1: TListBox;
    CCButton1: TCCButton;
    CCButton2: TCCButton;
    Label8: TLabel;
    CCButton4: TCCButton;
    Label9: TLabel;
    Label10: TLabel;
    tiefeZuege: TCCEdit;
    tiefeKI: TCCEdit;
    CCButton5: TCCButton;
    CCButton6: TCCButton;
    CCButton7: TCCButton;
    CCButton8: TCCButton;
    tab2: TCCPanel;
    Label11: TLabel;
    CheckBox1: TCheckBox;
    CheckBox3: TCheckBox;
    CCScrollBar1: TCCScrollBar;
    CheckBox4: TCheckBox;
    Label13: TLabel;
    Label14: TLabel;
    CCPanel3: TCCPanel;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    CCPanel4: TCCPanel;
    CCPanel5: TCCPanel;
    Label12: TLabel;
    WhitehumanPlayer: TRadioButton;
    WhiteComputerPlayer: TRadioButton;
    Label15: TLabel;
    BlackHumanPlayer: TRadioButton;
    BlackComputerPlayer: TRadioButton;
    ErreichbareFelder: TCheckBox;
    procedure weiterClick(Sender: TObject);
    procedure zurueckClick(Sender: TObject);
    procedure TabSet1Change(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
    procedure ScrollBar1Change(Sender: TObject);
    procedure tiefeKIKeyPress(Sender: TObject; var Key: Char);
    procedure CheckBox3Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure CCButton2Click(Sender: TObject);
    procedure CCButton4Click(Sender: TObject);
    procedure CCButton1Click(Sender: TObject);
    procedure CCButton5Click(Sender: TObject);
    procedure CCButton6Click(Sender: TObject);
    procedure CCButton8Click(Sender: TObject);
    procedure CCButton7Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CCButton3Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen}
  protected
    alteEigenschaften:TBrandubhConfig;
    alteEigenschaftOberflaecheEchtzeitVergroesern_b:boolean;
    procedure ActivateStandardConfig;
    procedure ActivateOldConfig;
    procedure SetActiveConfigAsOldConfig;
  public
    { Public-Deklarationen}
    ProgramAlreadyStarted_b:boolean;
  end;

var
  Form2: TForm2;

implementation

uses Unit3;

{$R *.DFM}

procedure TForm2.weiterClick(Sender: TObject);
begin
  TabSet1.TabIndex:=TabSet1.TabIndex+1;
end;

procedure TForm2.zurueckClick(Sender: TObject);
begin
  TabSet1.TabIndex:=TabSet1.TabIndex-1;
end;

procedure TForm2.TabSet1Change(Sender: TObject; NewTab: Integer;
  var AllowChange: Boolean);
var i:integer;
    s:string;
begin
zurueck.Enabled:=newTab<>TabSet1.FirstIndex;
weiter.Enabled:=newTab<>TabSet1.Tabs.Count-1;
zurueck.Paint;weiter.Paint;
for i:=0 to TabSet1.Tabs.Count-1 do
  (findcomponent('tab'+chr(i+48))as TCCPanel).Visible:=NewTab=i;
if NewTab= TabSet1.Tabs.Count-1 then begin
  ListBox1.Clear;
  ListBox1.Items.Add('*Oberfläche:');

  ListBox1.Items.Add('Helligkeit: |'+IntToStr(alteEigenschaften.OberflaecheHelligkeit_im)+'|'+IntToStr(CCScrollBar1.ScrollBarInformationen.Position));

  s:='Alle möglichen Züge für eine Stellung anzeigen: |';
  if alteEigenschaften.OberflaecheZeigAlleZuege_b then s:=s+'ja|' else s:=s+'nein|';
  if CheckBox1.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);

  s:='Alle erreichbaren Felder kennzeichnen: |';
  if alteEigenschaften.OberflaecheZeigAlleErreichbareFelder_b then s:=s+'ja|' else s:=s+'nein|';
  if ErreichbareFelder.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);

  s:='Bereiche in Echtzeit vergrößern: |';
  if alteEigenschaftOberflaecheEchtzeitVergroesern_b then s:=s+'ja|' else s:=s+'nein|';
  if CheckBox3.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);

  ListBox1.Items.Add('*Regeln:');

  s:='Weiß gewinnt, wenn schawarz keine Figuren mehr hat: |';
  if alteEigenschaften.RegelnweissgewinntwennschwarzKeineFigurenMehrHat_b then s:=s+'ja|' else s:=s+'nein|';
  if RadioButton3.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);

  ListBox1.Items.Add('*Spieler:');
  
  s:='Weißer Spieler menschlich: |';
  if alteEigenschaften.SpielerWhiteHuman_b then s:=s+'ja|' else s:=s+'nein|';
  if WhitehumanPlayer.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);

  s:='Schwarzer Spieler menschlich: |';
  if alteEigenschaften.SpielerBlackHuman_b then s:=s+'ja|' else s:=s+'nein|';
  if BlackHumanPlayer.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);


  ListBox1.Items.Add('*KI:');
  ListBox1.Items.Add('Tiefe fürs Anzeigen der möglicheng Züge: |'+IntToStr(alteEigenschaften.KITiefeBeiAnzeigenDerMoeglichenZuege_i)+'|'+tiefeZuege.Text);
  ListBox1.Items.Add('Tiefe fürs Fahren des Computergegners: |'+IntToStr(alteEigenschaften.KITiefeBeimComputerSpiel_i)+'|'+tiefeKI.Text);
  s:='Bei einer Spielfeldanalyse auf höchste Priorität schalten: |';
  if alteEigenschaften.KIHighPriority_b then s:=s+'ja|' else s:=s+'nein|';
  if CheckBox4.Checked then s:=s+'ja' else s:=s+'nein';
  ListBox1.Items.Add(s);
end;
end;

procedure TForm2.ScrollBar1Change(Sender: TObject);
//  function AufHellen(const color:TColor)
begin
  label13.Caption:=IntToStr(CCScrollBar1.ScrollBarInformationen.Position);
  Label13.Left:=CCScrollBar1.ScrollBarInformationen.PagePos_i+CCScrollBar1.Left-3;
  color:=SetHelligkeit($00004080,CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.Color:=color;
  form1.CCDarstellungsSteuerung1.OberflaecheVon3DObjekten:=color;
  TabSet1.BackgroundColor:=color;
  TabSet1.SelectedColor:=color;
  tabset1.UnselectedColor:= SetHelligkeit(AufHellenDurchAddition( $00004080,60),CCScrollBar1.ScrollBarInformationen.Position-254);

  form1.CCDarstellungsSteuerung1.Licht:=SetHelligkeit(AufHellenDurchAddition($00004080,80),CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.CCDarstellungsSteuerung1.Glanz:=SetHelligkeit(AufHellenDurchAddition($00004080,150),CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.CCDarstellungsSteuerung1.Schatten:=SetHelligkeit(AufHellenDurchAddition($00004080,-80),CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.CCDarstellungsSteuerung1.DunklerSchatten:=SetHelligkeit(AufHellenDurchAddition($00004080,-150),CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.CCDarstellungsSteuerung1.ScrollBarFarbe1:=SetHelligkeit(AufHellenDurchAddition($00004080,30),CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.CCDarstellungsSteuerung1.ScrollBarFarbe2:=SetHelligkeit(AufHellenDurchAddition($00004080,70),CCScrollBar1.ScrollBarInformationen.Position-254);
  form1.CCDarstellungsSteuerung1.Editcolor:=SetHelligkeit(AufHellenDurchAddition($00004080,60),CCScrollBar1.ScrollBarInformationen.Position-254);
  ListBox1.Color:=form1.CCDarstellungsSteuerung1.Editcolor;
  form1.ZugMerker.Color:=form1.CCDarstellungsSteuerung1.Editcolor;
  form1.ListBox1.Color:=form1.CCDarstellungsSteuerung1.Editcolor;
  form1.Spiel_xzsvb.Konfiguration.OberflaecheHelligkeit_im:=CCScrollBar1.ScrollBarInformationen.Position;

  form1.font.color:=SetHelligkeit($00808080,254-CCScrollBar1.ScrollBarInformationen.Position);
  form2.font.color:=form1.font.color;
  form1.CCDarstellungsSteuerung1.ButtonText:=form1.font.color;
  form1.CCDarstellungsSteuerung1.EditTextColor:=form1.font.color;
  form1.Refresh;
  form2.Refresh;
  if assigned(form3) then
    form3.color:=color;
end;

procedure TForm2.tiefeKIKeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9']) then
    key:=#0; 
end;

procedure TForm2.CheckBox3Click(Sender: TObject);
begin
if CheckBox3.checked then
  form1.Splitter1.ResizeStyle:=rsUpdate
else
  form1.Splitter1.ResizeStyle:=rsPattern;
form1.Splitter2.ResizeStyle:=form1.Splitter1.ResizeStyle;
end;

procedure TForm2.CheckBox1Click(Sender: TObject);
begin
  form1.mogzug.Visible:=CheckBox1.Checked;
  form1.splitter1.Visible:=CheckBox1.Checked;
  form1.CCPanel3.Visible:=CheckBox1.Checked;
end;

procedure TForm2.CheckBox4Click(Sender: TObject);
begin
  form1.spiel_xzsvb.analyser_xza.RealTimePriority_b:=CheckBox4.Checked;
end;

procedure TForm2.FormCreate(Sender: TObject);
var h:THandle;
begin
  alteEigenschaften:=TBrandubhConfig.Create;
  h:=GetSystemMenu(handle,false);
  EnableMenuItem(h,sc_close,mf_grayed);
  SetClassLong(handle,gcl_style,cs_noclose);
  tab0.BringToFront;
  formshow(sender);
end;

procedure TForm2.ActivateStandardConfig;
begin
  alteEigenschaften.ActivateStandard;
  alteEigenschaftOberflaecheEchtzeitVergroesern_b:=false;
end;
procedure TForm2.ActivateOldConfig;
begin
  CCScrollBar1.ScrollBarInformationen.Position:=alteEigenschaften.OberflaecheHelligkeit_im;
  CheckBox1.Checked:=alteEigenschaften.OberflaecheZeigAlleZuege_b;
  CheckBox3.Checked:=alteEigenschaftOberflaecheEchtzeitVergroesern_b;
  RadioButton3.Checked:=alteEigenschaften.RegelnweissgewinntwennschwarzKeineFigurenMehrHat_b;
  tiefeZuege.Text:=IntToStr(alteEigenschaften.KITiefeBeiAnzeigenDerMoeglichenZuege_i);
  tiefeKI.Text:=IntToStr(alteEigenschaften.KITiefeBeimComputerSpiel_i);
  checkBox4.Checked:=alteEigenschaften.KIHighPriority_b;
  WhitehumanPlayer.Checked:=alteEigenschaften.SpielerWhiteHuman_b;
  BlackHumanPlayer.Checked:=alteEigenschaften.SpielerBlackHuman_b;
  WhiteComputerPlayer.Checked:=not alteEigenschaften.SpielerWhiteHuman_b;
  BlackComputerPlayer.Checked:=not alteEigenschaften.SpielerBlackHuman_b;
  ErreichbareFelder.Checked:=alteEigenschaften.OberflaecheZeigAlleErreichbareFelder_b;
end;
procedure TForm2.SetActiveConfigAsOldConfig;
begin
  alteEigenschaften.OberflaecheHelligkeit_im:=CCScrollBar1.ScrollBarInformationen.Position;
  alteEigenschaften.OberflaecheZeigAlleZuege_b:=CheckBox1.Checked;
  alteEigenschaften.OberflaecheZeigAlleErreichbareFelder_b:=ErreichbareFelder.Checked;
  alteEigenschaftOberflaecheEchtzeitVergroesern_b:=CheckBox3.Checked;
  alteEigenschaften.RegelnweissgewinntwennschwarzKeineFigurenMehrHat_b:=RadioButton3.Checked;
  alteEigenschaften.KITiefeBeiAnzeigenDerMoeglichenZuege_i:=StrToInt(tiefeZuege.Text);
  alteEigenschaften.KITiefeBeimComputerSpiel_i:=StrToInt(tiefeKI.Text);
  alteEigenschaften.KIHighPriority_b:=checkBox4.Checked;
  alteEigenschaften.SpielerWhiteHuman_b:=WhitehumanPlayer.Checked;
  alteEigenschaften.SpielerBlackHuman_b:=BlackHumanPlayer.Checked;
end;
procedure TForm2.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var s1,s2,s3:string;
    s1w,s1_2w:integer;
begin
  if odSelected in State then begin
    ListBox1.Canvas.Font.Color:=Form1.CCDarstellungsSteuerung1.getColorFromWindowColorKey(COLOR_HIGHLIGHTTEXT);
    ListBox1.Canvas.brush.Color:=Form1.CCDarstellungsSteuerung1.getColorFromWindowColorKey(COLOR_HIGHLIGHT)
  end else begin
    ListBox1.Canvas.Font.Color:=Form1.CCDarstellungsSteuerung1.getColorFromWindowColorKey(COLOR_WINDOWTEXT);
    ListBox1.Canvas.brush.Color:=ListBox1.Color;
  end;
  ListBox1.Canvas.pen.Style:=psClear;
  ListBox1.Canvas.Rectangle(rect.left,rect.top-1,rect.right+1,rect.bottom+1);
  if ListBox1.Items[index][1]='*' then begin
    s1:=ListBox1.Items[index];
    delete(s1,1,1);
    ListBox1.Canvas.Font.Style:=[fsBold];
    ListBox1.Canvas.TextOut(rect.left+2,rect.top,s1);
  end else begin
    s1:=GetShortHint(ListBox1.Items[index]);
    s2:=GetLongHint(ListBox1.Items[index]);
    s3:=GetLongHint(s2);
    s2:=GetShortHint(s2);
    ListBox1.Canvas.Font.Style:=[];
    if s2<>s3 then begin
      ListBox1.Canvas.Font.Color:=clRed;
      s1w:=ListBox1.Canvas.textWidth(s1);
      s1_2w:=ListBox1.Canvas.textWidth(s1+s2);
      ListBox1.Canvas.TextOut(rect.left+10,rect.top,s1);
      ListBox1.Canvas.Font.Style:=[fsStrikeout];
      ListBox1.Canvas.Font.Color:=clGray;
      ListBox1.Canvas.TextOut(rect.left+s1w+10,rect.top,s2);
      ListBox1.Canvas.Font.Style:=[fsBold];
      ListBox1.Canvas.Font.Color:=clRed;
      ListBox1.Canvas.TextOut(rect.left+s1_2w+13,rect.top,s3);
    end else
      ListBox1.Canvas.TextOut(rect.left+10,rect.top,s1+s2);
  end;
end;

procedure TForm2.CCButton2Click(Sender: TObject);
var temp:boolean;
begin
  ActivateStandardConfig;
  ActivateOldConfig;
  TabSet1Change(tabset1,5,temp);
end;

procedure TForm2.CCButton4Click(Sender: TObject);
var temp:boolean;
begin
  if not CCButton4.Enabled then begin
    SetActiveConfigAsOldConfig;
    CCButton4.Enabled:=true;
    CCButton4.Refresh;
  end;
  ActivateOldConfig;
  TabSet1Change(tabset1,5,temp);
end;

procedure TForm2.CCButton1Click(Sender: TObject);
var registry:TRegistry;
begin
  SetActiveConfigAsOldConfig;
  form1.spiel_xzsvb.Konfiguration:=alteEigenschaften;
  close;
  CCButton4.Enabled:=true;
  registry:=TRegistry.create;
  try
    registry.RootKey:=HKEY_CURRENT_USER;
    registry.OpenKey('\Software\BeniBela\Brandubh',true);
    registry.WriteInteger('Helligkeit',alteEigenschaften.OberflaecheHelligkeit_im);
    registry.writeBool('Alle Möglichen Züge Anzeigen',alteEigenschaften.OberflaecheZeigAlleZuege_b);
    registry.writeBool('Erreichbare Felder markieren',alteEigenschaften.OberflaecheZeigAlleErreichbareFelder_b);
    registry.writeBool('Echtzeitvergrößern',alteEigenschaftOberflaecheEchtzeitVergroesern_b);
    registry.writeBool('Weiß gewinnt, wenn Schwarz keine Figuren mehr hat',alteEigenschaften.RegelnweissgewinntwennschwarzKeineFigurenMehrHat_b);
    registry.writeInteger('Tiefe beim ermitteln der möglichen Züge',alteEigenschaften.KITiefeBeiAnzeigenDerMoeglichenZuege_i);
    registry.writeInteger('Tiefe beim Spielen des Computers',alteEigenschaften.KITiefeBeimComputerSpiel_i);
    registry.writeBool('HighPriority',alteEigenschaften.KIHighPriority_b);
    registry.WriteBool('weißer Spieler menschlich',alteEigenschaften.SpielerWhiteHuman_b);
    registry.WriteBool('schwarzer Spieler menschlich',alteEigenschaften.SpielerBlackHuman_b);
  finally
    registry.free;
  end;
end;

procedure TForm2.CCButton5Click(Sender: TObject);
begin
  tiefeZuege.Text:=IntToStr(StrToInt(tiefeZuege.Text)+1);
end;

procedure TForm2.CCButton6Click(Sender: TObject);
begin
  tiefeZuege.Text:=IntToStr(StrToInt(tiefeZuege.Text)-1);

end;

procedure TForm2.CCButton8Click(Sender: TObject);
begin
  tiefeKI.Text:=IntToStr(StrToInt(tiefeKI.Text)+1);

end;

procedure TForm2.CCButton7Click(Sender: TObject);
begin
  tiefeKI.Text:=IntToStr(StrToInt(tiefeKI.Text)-1);

end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  alteEigenschaften.free;
end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (ssAlt in shift) and (key=vk_f4) then
  TabSet1.TabIndex:=TabSet1.Tabs.Count-1;
end;

procedure TForm2.CCButton3Click(Sender: TObject);
begin
  Form3.ShowModal;
end;

procedure TForm2.FormShow(Sender: TObject);
var registry:TRegistry;
begin
  registry:=TRegistry.create;
  try
    registry.RootKey:=HKEY_CURRENT_USER;
    if registry.KeyExists('\Software\BeniBela\Brandubh') then
      registry.OpenKey('\Software\BeniBela\Brandubh',false)
     else begin
       ProgramAlreadyStarted_b:=false;
       ActivateStandardConfig;
       CCButton4.Enabled:=False;
       abort;
     end;
    alteEigenschaften.OberflaecheHelligkeit_im:=registry.ReadInteger('Helligkeit');
    alteEigenschaften.OberflaecheZeigAlleZuege_b:=registry.ReadBool('Alle Möglichen Züge Anzeigen');
    alteEigenschaften.OberflaecheZeigAlleErreichbareFelder_b:=registry.readBool('Erreichbare Felder markieren');
    alteEigenschaftOberflaecheEchtzeitVergroesern_b:=registry.ReadBool('Echtzeitvergrößern');
    alteEigenschaften.RegelnweissgewinntwennschwarzKeineFigurenMehrHat_b:=registry.ReadBool('Weiß gewinnt, wenn Schwarz keine Figuren mehr hat');
    alteEigenschaften.SpielerWhiteHuman_b:=registry.ReadBool('weißer Spieler menschlich');
    alteEigenschaften.SpielerBlackHuman_b:=registry.ReadBool('schwarzer Spieler menschlich');
    alteEigenschaften.KITiefeBeiAnzeigenDerMoeglichenZuege_i:=registry.ReadInteger('Tiefe beim ermitteln der möglichen Züge');
    alteEigenschaften.KITiefeBeimComputerSpiel_i:=registry.ReadInteger('Tiefe beim Spielen des Computers');
    alteEigenschaften.KIHighPriority_b:=registry.ReadBool('HighPriority');
    form1.spiel_xzsvb.Konfiguration:=alteEigenschaften;
    ProgramAlreadyStarted_b:=true;
  finally
    ActivateOldConfig;
    registry.free;
  end;

end;

end.
 