![]() |
TStringGrid.FixedCols rechts darstellen ?
Hallo,
wie könnte ich in einem TStringGrid die FixedCols nicht links sondern rechts darstellen ? mfg |
Re: TStringGrid.FixedCols rechts darstellen ?
Hallo,
nein nicht mit dem Standardgrid. Gruß Frank |
Re: TStringGrid.FixedCols rechts darstellen ?
Wieso soll das mit dem Standardgrid nicht gehen ? :shock:
Delphi-Quellcode:
Die Prozedur muss nur im OnDrawCell des Grids aufgerufen werden.
procedure sgRechts (Sender: TObject; Rect: TRect; ACol, ARow:Integer);
var st: String; begin with Sender as TExtStringGrid do begin Canvas.FillRect(Rect); st := Cells[ACol,ARow]; InflateRect(rect,-2,-2); DrawText(Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT); end; end; |
Re: TStringGrid.FixedCols rechts darstellen ?
Es geht ja nicht um rechtsbündigen Text, sondern darum, die fixen Spalten nicht links, sondern rechts zu haben.
|
Re: TStringGrid.FixedCols rechts darstellen ?
Wenn du nicht gerade die Personal-Edition von Delphi hast kannst du doch in den Quellcode der Stringgrid-Komponente schnüffeln um den Code der linksbündigen FixedCols darstellung in eine rechtsbündige darstellung zu ändern. Die logik sollte die gleiche sein.
|
Re: TStringGrid.FixedCols rechts darstellen ?
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Ansatz, um die Spalte ganz rechts als Fixed zu setzen.
(Gibt noch ein Fehler beim Zeichnen wenn eine Zelle der zweitletzten Spalte selektiert wird und dann eine andere Zelle selektiert wird.)
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var TempRect: TRect; begin with Sender as TStringGrid do begin if ACol = Pred(ColCount) then begin TempRect := Rect; Canvas.Brush.Color := FixedColor; Canvas.FillRect(TempRect); DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDINNER, BF_RECT); Canvas.Brush.Color := clBlack; with TempRect do begin Bottom := Bottom + 1; Top := Top - 1; Left := Left - 1; Canvas.FrameRect(TempRect); end; end; end; end; procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin CanSelect := ACol <> Pred((Sender as TStringGrid).ColCount); end; |
Re: TStringGrid.FixedCols rechts darstellen ?
Zitat:
Delphi-Quellcode:
if ACol >= (ColCount - FixedRows) then
|
Re: TStringGrid.FixedCols rechts darstellen ?
Zitat:
|
Re: TStringGrid.FixedCols rechts darstellen ?
wie wollt ihr das Scrollen lösen?
Das Zeichnen allein ist ja am Ende noch die kleinste Hürde. Aber sobald das Grid größer ist, funktionierst ja nicht mehr. |
Re: TStringGrid.FixedCols rechts darstellen ?
Zitat:
|
Re: TStringGrid.FixedCols rechts darstellen ?
Zitat:
sicher, auch das würde man hinbekommen (letzte sichtbare Zelle rechts immer mit der "fixedcol" übermalen und Zellen, die rechts nicht komplett sichtbar sind, erst gar nicht zeichnen). Aber dann taucht schon das nächste Problem auf: Zellselektion und wenn sich der User mit den Cursortasten bewegt. |
Re: TStringGrid.FixedCols rechts darstellen ?
Zitat:
|
Re: TStringGrid.FixedCols rechts darstellen ?
Hallo,
es funktioniert alles aber ich kann in dem rechts neuerstellten TStringGrid.FixedCols leider nichts schreiben in allen anderen Cellen kein Problem. mfg |
Re: TStringGrid.FixedCols rechts darstellen ?
Das "funktioniert alles" bezweifle ich mal, aber wenn dein Anwendungsfall abgedeckt ist ok.
Wenn der Code von toms einfach so übernommen wurde ist es kein Wunder das in diesen Zellen nicht geschrieben werden kann. Die Zeile mit CanSelect verhindert das eine dieser Zellen überhaupt ausgewählt wird. Falls allerdings ein Text in den entsprechenden Zellen angezeigt werden soll, muss im DrawCell noch ein bischen was ergänzt werden (siehe Beitrag von Hansa weiter oben). |
Re: TStringGrid.FixedCols rechts darstellen ?
Hallo,
es funktioniert alles aber ich kann in dem rechts neuerstellten TStringGrid.FixedCols leider nichts schreiben in allen anderen Cellen kein Problem. for iZ:=0 to 7 do TStringGris.Cells[FixedCols, iZ]:= IntToStr(iZ); Bitte um Unterstützung. mfg |
Re: TStringGrid.FixedCols rechts darstellen ?
Die Zellen in der letzten Spalte können mit Cells[Pred(ColCount), iZ] := ... angesprochen werden.
Warum du den zugewiesenen Text eventuell nicht sehn wirst, hab ich grad erläutert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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