Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringgrid Problem (https://www.delphipraxis.net/40777-tstringgrid-problem.html)

zack0r 20. Feb 2005 21:09


TStringgrid Problem
 
Hallo!

Also ich habe folgendes Problem mit einem TStringGrid: ich bin dabei eine Software für Zeiterfassung zu programmieren. Die Software ist für den kleinen Betrieb von meinem Vatter bestimmt. Also ich will eigentlich nur das die verschiedenen Felder von dem jeweiligen Mitarbeiter markiert werden und dann bei klick auf einen Button oder bei enter die Zeilen entweder zu einer Zelle verbunden werden sollen oder ein Rahmen um die Zellen gezogen werden soll. Ersteres währe zwar besser aber ich habe es mal mit der zweiten möglichkeit versucht:

Delphi-Quellcode:
procedure TForm1.strgrdDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  with (sender as TStringGrid).Canvas do
  begin
    Pen.Color := clBlack;
    Pen.Width := 2;
    Pen.Style := psSolid;
    MoveTo(strgrd.selection.left, strgrd.selection.top );
    Lineto(strgrd.selection.right, strgrd.selection.top );
    Lineto(strgrd.selection.right, strgrd.selection.bottom );
    Lineto(strgrd.selection.left, strgrd.selection.bottom );
    Lineto(strgrd.selection.left, strgrd.selection.top );
  end;
end;
Damit habe ichs erfolglos versucht wenn ich damit eine Selektion mache und ein strgrd.repaint dann kommt ein ganz kleiner rahmen in die oberste linke Zelle. Wenn ich ein
Delphi-Quellcode:
if (aRow = 10) and (aCol = 5) and not (gdFixed In State) then
voransetze und die strgrd.selection's durch rect ersetze klappts. Ich bekomms aber net hin, dass der die Zellen einfach so Excel-like mit dem Rahmen umschließt.
Kann mir vielleicht jemand helfen? :) Danke!

IngoD7 21. Feb 2005 10:03

Re: TStringgrid Problem
 
Top, Bottom, Left und Right von TStringGrid.Selection sind keine Pixelangaben. Sie geben die Zeilen- und Spaltennummern des selektierten Bereiches an.

Nachtrag:
Mit der Funktion TStringGrid.CellRect() solltest du daraus aber die Pixel-Koordinaten gewinnen können.

zack0r 21. Feb 2005 17:12

Re: TStringgrid Problem
 
versteh ich nicht. MoveTo & LineTo erwarten doch integer-zeilenangaben und TStringgrid.selection.top etc. geben doch welche zurück, oder nicht? Also mit CellRect bin ich nicht weiter gekommen. Kannst du mir vielleicht nochmal helfen? danke

MFG

Keldorn 21. Feb 2005 17:37

Re: TStringgrid Problem
 
zum zeichnen innerhalb einer Zelle mußt du das übergebene rect verwenden. Zum Zusammenfügen gibt es ein paar Ansätze, allerdings ist das auch recht kompliziert. http://www.delphipraxis.net/internal...983&highlight=
ein paar Probleme werden dort auch angesprochen.

Mfg Frank

IngoD7 21. Feb 2005 18:58

Re: TStringgrid Problem
 
Zitat:

Zitat von zack0r
versteh ich nicht. MoveTo & LineTo erwarten doch integer-zeilenangaben und TStringgrid.selection.top etc. geben doch welche zurück, oder nicht? Also mit CellRect bin ich nicht weiter gekommen. Kannst du mir vielleicht nochmal helfen? danke

Bei den von dir angesprochenen Methoden geht es um Punkte (Pixel), bei Selection geht es um Zellen.
Wenn in der dritten Zeile eines StringGrids, die ersten 8 Zellen markiert sind, dann wird von Selection Zeilen- und Spaltennummern zurückgeliefert:
Top = 2 (3. Zeile)
Bottom = 2
Left = 0 (1. Zelle in Zeile)
Right = 7 (8. Zelle in Zeile)

Das heißt: Deine Markierung geht von Zelle(0/2) bis Zelle(7/2)

Wenn du diese Werte in deinen Canvas-Methoden benutzt, zeichnest du einen Strich von Pixelkoordinate 0/2 (links oben) nach Pixelkoordinate 7/2 (rechts unten).

Lies genau die Online-Hilfe zu Selection und den Canvas-Methoden durch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz