Einzelnen Beitrag anzeigen

Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Sudoku Zufallsgenerator mit Anzeige in 9*9 Stringrid

  Alt 24. Mai 2010, 12:37
Hallo,

da es viel Bedarf nach Sudokugeneratoren gibt, deren Ergebnisse auch in anderen Programmen nutzbar sind, habe ich ein kleines Tool geschrieben, welches ein Sudoku generiert und an ein anderes Programm übergibt.

Die SudokuCreate.Exe in der zip Datei muss nur in das Verzeichnis kopiert werden, in dem sich die aufrufende exe befindet.

Um dann ein Sudoku ins Programm zu laden, muss nur folgender Code eingearbeitet werden:
Delphi-Quellcode:

uses ..., ShellAPI;

//...

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure GetSudokuClick(Sender: TObject);
    procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; //<- Die Zeile ist wichtig!

//...

var
  Form1: TForm1;
  S:array [0..8] of array [0..8]of integer;
 {In diesem Array ist später das Sudoku gespeichert, aufgerufen werden die Werte über S[Reihe][Spalte]}

implementation


//Hier werden die empfangenen Daten verarbeitet

procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var x,y,i,j:integer;
    p:string;
begin
     j:=1;
     p:=string(PChar(Msg.CopyDataStruct.lpData));
     for x:=0 to 8 do
     for y:=0 to 8 do
     begin
          S[x][y]:=StrToInt(p[j]);
          j:=j+1;
     end;

     for i:=0 to 8 do
         for j:=0 to 8 do
         begin
              Stringgrid1.Cells[j,i]:=IntToStr(S[i][j]);
         end;
end;


procedure TForm1.GetSudokuClick(Sender: TObject); //Muss aufgerufen werden, wenn man ein Sudoku erstellt haben will
var
  aCopyData: TCopyDataStruct;
  p: PChar;
begin
//Falls die Sudokucreate.exe nicht im Programmverzeichnis liegt, muss dies angepasst werden
  winexec(ExtractFilePath(ParamStr(0))+'Sudokucreate.exe', SW_SHOWNORMAL);

  
  p := PChar('TForm1'); //Der unter type deklarierte Name muss hier eigetragen werden

  with aCopyData do begin
    dwData := 0;
    cbData := StrLen(p) + 1;
    lpData := p;
  end;
 
  // Die Fensterdaten werden an die SudokuCreate.exe übergeben, damit die Daten auch zurückkommen
  SendMessage(FindWindow('TSDokCreate', nil), WM_COPYDATA, Longint(Handle),
              Longint(@aCopyData));

end;
Im Anhang befindet sich sowohl die SudokuCreate.exe alleine (SudokuCreate.zip) und ein Testprogramm, welches den Code zum Aufruf
enthält und anwendet.

Liebe Grüße!
Angehängte Dateien
Dateityp: zip testprogramm_462.zip (382,2 KB, 25x aufgerufen)
Dateityp: zip sudokucreate_618.zip (175,9 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat