StringGrid DrawCell (gelöst)

Rund um die LCL und andere Komponenten
Antworten
ich
Beiträge: 2
Registriert: Sa 17. Sep 2016, 12:33

StringGrid DrawCell (gelöst)

Beitrag von ich »

Hallo,

ich versuche mittels DrawCell in ein StringGrid zu zeichnen. Es funktioniert auch aber ich sehe die Linien nur auf der Diagonalen von der linken oberen Ecke zur rechten Unteren.
Also die Zellen 0/0, 1/1 ... Mache ich das Grid so groß, daß ich Scrollbalken bekomme ist es auch von der linken oberen Ecke zur rechten Unteren was dann aber z.B.die Zellen 4/3, 5/4 ... sind.
Hier der Code:

Code: Alles auswählen

procedure TForm1.StrGridDrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
  with StrGrid.Canvas do
  begin
    pen.Color := clblack;
    pen.Width := 2;
    if (ACol in [1..64])and (ARow in [1..64]) then
    begin
      if(Map[ACol,ARow]>0)  then 
      begin
        if not(StrGrid.IsCellSelected[aCol,aRow])  then Brush.Color:=clAqua;
        FillRect(aRect);
 
        MoveTo(aRect.Bottom,aRect.Left);
        LineTo(aRect.Top,aRect.Left)  ;
        LineTo(aRect.Top,aRect.Right)  ;
      end;
    end;
  end;
end;


Und fürs bessere Verständnis noch mal ein Bild als Anhang - links ohne zu scrollen rechts gescrollt.

Was mache ich da falsch?

Und noch eine andere Frage : Wie bekommt man das gescrollte Grid per code wieder in die Normalposition (links-oben)?
Dateianhänge
Bildschirminhalt erfassen-1.jpg
Zuletzt geändert von ich am Sa 17. Sep 2016, 16:36, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: StringGrid DrawCell

Beitrag von wp_xyz »

Du vertauschst in den Zeichenbefehlen x und y: Canvas.MoveTo(x,y), LineTo(x,y), nicht ...(y,x).

Um wieder an den Anfang zu scrollen, setze TopRow des Grid auf 0, entsprechend LeftCol für horizontales Scrollen.

Ich weiß nicht, ob in deinem Grid auch Text vorkommt, das wäre das einzige Argument ein STRINGGrid zu verwenden. Für Zeichenoperationen würde ich generell eher ein TDrawGrid verwenden, der einzige Unterschied zum StringGrid ist das fehlende Cells[] Array; jedoch kannst du auch im DrawGrid Text anzeigen mithilfe der Canvas-Text-Routinen, du musst nur den Text anderswo herholen als aus den Cells des StringGrid.

ich
Beiträge: 2
Registriert: Sa 17. Sep 2016, 12:33

Re: StringGrid DrawCell

Beitrag von ich »

Das mit x und y ist natürlich des Rätsels Lösung. Das kommt davon wenn man schnell noch einmal etwas probieren will es klappt nicht und drei Tage später kommt man auf so einen Fehler nicht.

DANKE!

Es kommt im Grid auch Text vor - habe ich aus dem Codeschnipsel rausgenommen.

Antworten