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!