AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kreuzworträtsel

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

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

Kreuzworträtsel

  Alt 29. Mai 2012, 17:25
Hallo Leute,

mein Kreuzwortprogramm macht nicht das, was es tun soll.
Ein Screenshot befindet sich im Anhang zum besseren Verständnis.

Die obere Listbox enthält alle horizontalen, die untere alle vertikalen Fragen.
Wählt man einen Eintrag aus, so springt das rote Quadrat auf dem Stringgrid in fast allen Fällen in die richtige Zelle des Stringgrids:

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;
Das Problem taucht auf, wenn Frage vier markiert ist.
Diese ist als einzige in beiden Listboxes enthalten.
Hier springt das rote Kästchen gar nicht, ich weiß aber absolut nicht warum.

Zur Zusatzinfo die wichtigsten Ereignisse:

Delphi-Quellcode:
//
//TForm1.ListBoxHorizontalClick: Sucht eine ausgewählte horizontale Frage
//
procedure TForm1.ListBoxHorizontalClick(Sender: TObject);
begin
   ListBoxHorizontal.Update;
   ListBoxHorizontal.Repaint;
   GeheZuMarkierterFrage(ListBoxHorizontal);
   GeheZuMarkierterFrage(ListBoxHorizontal); //bei einmaligen Aufruf springt das Kästchen manchmal falsch
   Richtung := RHorizontal;
   SGridKreuzwort.SetFocus();
end;

//
//TForm1.ListBoxVertikalClick: Sucht eine ausgewählte vertikale Frage
//
procedure TForm1.ListBoxVertikalClick(Sender: TObject);
begin
   ListBoxVertikal.Update;
   ListBoxVertikal.Repaint;
   GeheZuMarkierterFrage(ListBoxVertikal);
   GeheZuMarkierterFrage(ListBoxVertikal);
   Richtung := RVertikal;
   SGridKreuzwort.SetFocus();
end;
Das rote Kästchen wird in der Prozedur OnDrawCell des Stringgrids gezeichnet:
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;
Angehängte Grafiken
Dateityp: png Screenshot.PNG (49,1 KB, 73x aufgerufen)
  Mit Zitat antworten Zitat
 


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 17:59 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 by Thomas Breitkreuz