Einzelnen Beitrag anzeigen

Noobmaster

Registriert seit: 18. Jul 2010
114 Beiträge
 
FreePascal / Lazarus
 
#4

Fehlerpräzisierung

  Alt 30. Mai 2012, 12:22
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;
  Mit Zitat antworten Zitat