Der Code
Delphi-Quellcode:
//
//TForm1.GeheZuFrage: Markiert das erste Feld der gesuchten Frage (markiert in Listbox)
//
procedure TForm1.GeheZuMarkierterFrage(var pListBox: TListBox);
var
i,j: Integer;
FrageNr: String;
Vertikal: Integer;
Horizontal: Integer;
begin
//Vertikal oder Horizontal?
Horizontal := 0;
Vertikal := 0;
if pListBox = ListBoxHorizontal then Horizontal := 1 else Vertikal := 1;
//Anfangskaestchen finden
//zunächst die Nr der Frage bestimmen
FrageNr := '';
i := 1;
while pListbox.Items[pListbox.ItemIndex][i] in ['0'..'9'] do
begin
FrageNr := FrageNr + pListbox.Items[pListbox.ItemIndex][i];
Inc(i);
end;
//Vorangestellte 0 eliminieren
FrageNr := IntToStr(StrToInt(FrageNr));
//Alle Kästchen nach der Nummer durchsuchen
for i := 0 to SGridKreuzwort.ColCount - 1 do
for j := 0 to SGridKreuzwort.RowCount - 1 do
if SGridKreuzwort.Cells[i,j] = FrageNr then
begin
SGridKreuzwort.Col := (i + Horizontal);
SGridKreuzwort.Row := (j + Vertikal);
end;
end;
markiert das richtige Kästchen.
Aber in dem OnDrawCell-Ereignis des Stringgrids ist eine andere Zelle markiert, was mir trotz schrittweisen Durchlaufen des Programms mit dem Debugger rätselhaft bleibt, da es ja in allen anderen Fällen funktioniert.
Delphi-Quellcode:
//Markierte Zelle einfärben
if SGridKreuzwort.IsCellSelected[aCol,aRow] then
begin
//Zelleninhalt mit Hintergrundfarbe löschen/einfärben
SGridKreuzwort.Canvas.Brush.Color := clRed;
SGridKreuzwort.Canvas.Fillrect(aRect);
//Mit kleinerem Kästchen in Originalfarbe übermalen -> Rahmen entsteht
SGridKreuzwort.Canvas.Brush.Color := clWhite; //Standardfarbe
outRect.Left := aRect.Left+2;
outRect.Top := aRect.Top+2;
outRect.Right := aRect.Right-2;
outRect.Bottom := aRect.Bottom-2;
SGridKreuzwort.Canvas.Fillrect(outRect);
end;