![]() |
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:
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
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;
Delphi-Quellcode:
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.
if (aRow = 10) and (aCol = 5) and not (gdFixed In State) then
Kann mir vielleicht jemand helfen? :) Danke! |
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. |
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 |
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.
![]() ein paar Probleme werden dort auch angesprochen. Mfg Frank |
Re: TStringgrid Problem
Zitat:
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 09:53 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