AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kreuzworträtsel

Ein Thema von Noobmaster · begonnen am 29. Mai 2012 · letzter Beitrag vom 31. Mai 2012
Antwort Antwort
Noobmaster

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

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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kreuzworträtsel

  Alt 30. Mai 2012, 12:26
Könnte die Bedingung
Zitat:
if SGridKreuzwort.Cells[i,j] = FrageNr then
evtl. mehrfach zutreffen? Suchst Du in dem Fall nur nach dem ersten Treffer? Das könnte zumindest ein Anhaltspunkt sein, da Deine For-Schleifen ja trotzdem weiter abgearbeitet werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Noobmaster

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

AW: Kreuzworträtsel

  Alt 30. Mai 2012, 12:32
Delphi-Quellcode:
   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);
            {SGridKreuzwort.Update;
            SGridKreuzwort.Repaint;}

            break; //Schleife abbrechen, da Kästchen gefunden
         end;
Auch mit "break;" tritt der Fehler immer noch auf. Ich habe jetzt mal im OnDrawCell-Ereignis
if SGridKreuzwort.IsSelected[aCol,aRow] ersetzt mit
if (ACol = SGridKreuzwort.Col) and (aRow = SGridKreuzwort.Row) Scheint zu funktionieren.

Was mich allerdings stutzig macht, ist die Tatsache dass ich in den OnClick-Ereignissen der beiden Listboxen die Prozedure GeheZuMarkierterFrage() 2x aufrufen muss...
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz