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.FixedCols rechts darstellen ? (https://www.delphipraxis.net/130390-tstringgrid-fixedcols-rechts-darstellen.html)

madina 7. Mär 2009 15:57


TStringGrid.FixedCols rechts darstellen ?
 
Hallo,

wie könnte ich in einem TStringGrid die FixedCols nicht links sondern rechts darstellen ?

mfg

Keldorn 7. Mär 2009 16:16

Re: TStringGrid.FixedCols rechts darstellen ?
 
Hallo,

nein nicht mit dem Standardgrid.

Gruß Frank

Hansa 7. Mär 2009 17:30

Re: TStringGrid.FixedCols rechts darstellen ?
 
Wieso soll das mit dem Standardgrid nicht gehen ? :shock:

Delphi-Quellcode:
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;
Die Prozedur muss nur im OnDrawCell des Grids aufgerufen werden.

DeddyH 7. Mär 2009 17:35

Re: TStringGrid.FixedCols rechts darstellen ?
 
Es geht ja nicht um rechtsbündigen Text, sondern darum, die fixen Spalten nicht links, sondern rechts zu haben.

Bernhard Geyer 7. Mär 2009 17:37

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.

toms 7. Mär 2009 17:55

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;

DeddyH 7. Mär 2009 18:43

Re: TStringGrid.FixedCols rechts darstellen ?
 
Zitat:

Delphi-Quellcode:
if ACol = Pred(ColCount) then

Das sollte man vielleicht ändern in
Delphi-Quellcode:
if ACol >= (ColCount - FixedRows) then

toms 7. Mär 2009 18:48

Re: TStringGrid.FixedCols rechts darstellen ?
 
Zitat:

Zitat von DeddyH
Zitat:

Delphi-Quellcode:
if ACol = Pred(ColCount) then

Das sollte man vielleicht ändern in
Delphi-Quellcode:
if ACol >= (ColCount - FixedRows) then

Mein Code ist nicht universell (d.h er nimmt keine Rücksicht auf die sonstigen Einstellungen in Options etc)

Keldorn 7. Mär 2009 18:55

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.

toms 7. Mär 2009 20:14

Re: TStringGrid.FixedCols rechts darstellen ?
 
Zitat:

Zitat von Keldorn
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.

Warum sollte es nicht mehr funktionieren? Was funktioniert nicht mehr?

Keldorn 7. Mär 2009 20:35

Re: TStringGrid.FixedCols rechts darstellen ?
 
Zitat:

Zitat von toms
Warum sollte es nicht mehr funktionieren? Was funktioniert nicht mehr?

na, wenn ich fixedcols rechts haben möchte würde, würde ich erwarten wollen, das die immer rechts ist. Wenn Du horizontal scrollst, wäre das ja nicht mehr der Fall.

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.

toms 8. Mär 2009 09:22

Re: TStringGrid.FixedCols rechts darstellen ?
 
Zitat:

Zitat von Keldorn
Zitat:

Zitat von toms
Warum sollte es nicht mehr funktionieren? Was funktioniert nicht mehr?

na, wenn ich fixedcols rechts haben möchte würde, würde ich erwarten wollen, das die immer rechts ist. Wenn Du horizontal scrollst, wäre das ja nicht mehr der Fall.

Ach so. Dann wird es tatsächlich schwierig dies so hinzukriegen.

madina 13. Mär 2009 12:29

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

Blup 13. Mär 2009 14:49

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).

madina 13. Mär 2009 15:43

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

Blup 13. Mär 2009 15:56

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