Einzelnen Beitrag anzeigen

CaptainAwsome

Registriert seit: 12. Jul 2008
8 Beiträge
 
#1

StringGrid - dickere Trennspalte

  Alt 12. Jul 2008, 10:03
Ich habe ein Generator für 9x9 Sudokus programmiert.
Die Zahlen werden in eine 9x9 StringGrid geschrieben.

Wie kann ich einzelne Trennlinien dicker machen? Also so, dass die Stringgrid in 3x3 Quadrate unterteilt wird die wiederrum aus 3x3 Zahlenfelder bestehen.
Ich weiß, dass man mit GridLineWidth die Zeilenstärke ändern kann, aber das bringt mich nicht weiter.

Dann wäre es auch noch gut wenn man die StringGrid abkopieren könnte, nachdem sie mit dem Sudoku gefüllt wurde.
Gibt es dafür einen Wert den man auf True oder so setzten muss?
Gut wäre wenn es mit strg+c gehen würde, besser wenn zusätzlich auch mit einem rechtsklick-Menü.
Momentan kann man nicht mal mehr markieren, da ich goEditing auf True habe.

Programm mit Quellcode:
http://rapidshare.com/files/12909071...uGenerator.rar

Ich hoffe ich hab mich verständlich ausgedrückt und mir kann jemand helfen

Delphi-Quellcode:
procedure Sudokucreate;
var i,j,k,IFehler:integer;
    number,col,col2,row,posi,rnd,c:integer;
    SmZ:string; //mögliche Reihen
    Bgeloest:boolean;

begin

    randomize;
    Bgeloest := false; // Sudoku wurde noch nicht erstellt
    IFehler := 0; // bisher kein Fehler aufgetaucht
    

  while Bgeloest = false do // solang Sudoku fehlerfrei erstellt wurde
  begin

    for i := 0 to n-1 do // füllt alle Felder der StringGrid mit 'N'
    begin
      for j := 0 to n-1 do
      Form1.StringGrid1.Cells[i,j]:='N';
    end;

    for number := 1 to n do // 1-9 wird
    begin // in eine zufällige Reihe der ersten Spalte geschrieben,
      for col := 0 to n-1 do // dann in die zweite Spalte usw.
      begin

        SmZ :='';
        for k := 0 to n-1 do
          SmZ:=SmZ+ inttostr(k); // mögliche Zufallsreihe ist ohne Überprüfung immer die 1.-9.


        for row := 0 to n-1 do // es werden alle Zellen der aktuellen Spalte überprüft,
        begin // ob schon eine Zahl reingeschrieben wurde
          if Form1.StringGrid1.Cells[col,row]<>'Nthen
          begin
          posi := pos(inttostr(row),SmZ); // wenn ja wird die Reihe aus den möglichen
          delete(SmZ,posi,1); // Reihen gelöscht
          end; {if-bedingung}
        end;{row-schleife}

        if col > 0 then // es wird überprüft ob in der Reihe die Zahl schon vorhanden ist
        begin // wenn ja, wird die Reihe aus den mögliche Reihen gelöscht
          for col2 := 0 to col-1 do
          begin
            for row := 0 to n-1 do
            begin
              if Form1.StringGrid1.Cells[col2,row] = inttostr(number) then
              begin
                posi := pos(inttostr(row),SmZ);
                delete(SmZ,posi,1);
              end {if Zelleninhalt=number}
            end;{row-schleife}
          end;{col2-schleife}
        end;{if col>0}

        case col of
          0..2: c := 0;
          3..5: c := 3;
          6..8: c := 6;
        end;

        for col2 := c to c+2 do // es wird überprüft ob im Quadrat die Zahl schon vorhanden ist
        begin // wenn ja, wird die Reihe aus den mögliche Reihen gelöscht
          for row := 0 to n-1 do
          begin
            if Form1.StringGrid1.Cells[col2,row] = inttostr(number) then
            begin
              case row of
              0..2: begin
                      for i := 0 to 2 do
                      begin
                        posi := pos(inttostr(i),SmZ);
                        delete(SmZ,posi,1);
                      end;
                    end;
              3..5: begin
                      for i := 3 to 5 do
                      begin
                        posi := pos(inttostr(i),SmZ);
                        delete(SmZ,posi,1);
                      end;
                    end;
              6..8: begin
                      for i := 6 to 8 do
                      begin
                        posi := pos(inttostr(i),SmZ);
                        delete(SmZ,posi,1);
                      end;
                    end;
              end;
            end;{if gleiche nummer in stringgridzelle}
          end; {row-schleife}
        end; {col2-schleife}







        If Length(SmZ) > 0 then // wenn in einer Spalte keine Reihe mehr möglich ist,
        begin // tritt ein Fehler auf und es wird nochmal versucht ein Sudoku zu erstellen
          rnd := random(Length(SmZ))+1; // Wenn kein Fehler auftritt wird die Zahl in die aktuelle Spalte in
          row := strtoint(SmZ[rnd]); // die zufällige Reihe geschrieben
          Form1.StringGrid1.Cells[col,row] := inttostr(number)
          end
        else
        begin
          IFehler := IFehler+1;
        end;
      end; {col-schleife}
    end; {number-schleife}





    If IFehler = 0 then
    Bgeloest := true
    else
    IFehler := 0;



  end; {Bgeloest}


end;
  Mit Zitat antworten Zitat