![]() |
Stringgrid-Zellen rechtsbündig
Hi,
ich habe hier ein abgeleitetes Stringgrid. Es geht da u.a. um Zellenformatierung. Reals sollen direkt autom. Nachkommastellen haben usw. Momentan sieht das so aus :
Delphi-Quellcode:
Damit kann ich also statt Cells [x,y] einfach CellReal [x,y] aufrufen und fertig. Die Zellen sind allerdings dann nicht rechtsbündig. Aktuell habe ich dafür noch eine Prozedur, die im DrawCell aufgerufen wird :
procedure TExtStringGrid.SetCellReal(ACol, ARow: integer;
const Value: real); begin FCellReal := Value; Cells [ACol,ARow] := FloatToStrF(FCellReal,ffFixed,8,2); end;
Delphi-Quellcode:
Wie kriege ich diese Prozedur sgRechts nun direkt der Komponente beigebracht ? Da gibts ja so kein Rect etc.
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]; DrawText(Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT); end; end; |
Re: Stringgrid-Zellen rechtsbündig
Hallo,
Zitat:
Den InplaceEditor von TStringGrid überschreiben bzw ersetzen ? Gruß Question_mark |
Re: Stringgrid-Zellen rechtsbündig
Es geht nur um die Ausgabe des Grids, also die Anzeige.
|
Re: Stringgrid-Zellen rechtsbündig
Mal doch selber
|
Re: Stringgrid-Zellen rechtsbündig
Werde ich nicht tun. Fange gewiss noch an den Bildschirm anzustreichen. :mrgreen: Die Komponente soll lediglich das integriert machen, was die externe Prozedur macht. Wer weiss mehr ?
|
Re: Stringgrid-Zellen rechtsbündig
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich hatte vor einiger Zeit mal begonnen, eine eigene Grid-Komponente abzuleiten, habe dann allerdings irgendwann nicht mehr weitergemacht. Ich habe die Unit sowie eine Testanwendung mal angehängt. Ob Du die Testanwendung linken kannst, musst Du mal schauen - ist wie gesagt schon ein paar Tage her - vielleicht kannst Du ja etwas davon gebrauchen. Noch etwas zu der Testanwendung: Alle Funktionen sind über das Kontextmenü und die Toolbar zugänglich. Fast alle Funktionen lassen sich nur dann ausführen, wenn eine Zelle 'spezialisiert' ist. Du musst also erst eine Zelle über das Kontextmenü 'spezialisieren' - doofer Ausdruck, ich weiß... Wenn Du also die Ausrichtung einer Zelle ändern willst, musst Du sie erst spezialisieren, dann die Ausrichtung oben in der Toolbar einstellen, und dann über das Kontextmenü die Ausrichtung für die aktive Zelle setzen. Das lässt sich natürlich auch einfacher implementieren, aber das ist wie gesagt nur eine Anwendung, um alle Funktionalitäten zu testen. Edit: ich hatte irgendwann mal angefangen, die Kommentare ins Englische zu übersetzen - aber wie gesagt, nur angefangen! Also nicht wundern, wenn es irgendwann wieder deutsch wird - aber Hauptsache überhaupt kommentiert ;) |
Re: Stringgrid-Zellen rechtsbündig
Ich habe
![]() rechtsbündig formatieren kann und den Code auf Rechtsbündigkeit gekürzt.
Delphi-Quellcode:
Ich denke, das können andere auch gebrauchen ...
//http://www.delphi-forum.de
//procedure WriteTextAligned und //procedure TForm1.StringGrid1DrawCell procedure WriteTextAligned(Canvas: TCanvas; Rect: TRect; Alignment: TAlignment; Text: string); var xPos, yPos: integer; begin xPos := Rect.Left + 2; // Standard verhalten yPos := Rect.Top + 2; // Standard verhalten with Canvas do begin xPos := Rect.Left + (Rect.Right - Rect.Left - TextWidth(Text) - 2); TextRect(Rect, xPos, yPos, Text); end; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin // Alle Spalten rechtsbündig WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taRightJustify, TStringGrid(Sender).Cells[Acol, ARow]); end; |
Re: Stringgrid-Zellen rechtsbündig
Nunja, mit DrawText (siehe Ausgangspost) ist das einfacher gemacht, dazu müsste es auch diverse Beispiele in der DP geben.
|
Re: Stringgrid-Zellen rechtsbündig
@Detlef
Danke für den Tipp, muss ich ausprobieren. |
Re: Stringgrid-Zellen rechtsbündig
Habe das mal wieder in Angriff genommen. Und zwar so :
Delphi-Quellcode:
Ergebnis : Nichts ! Ab der Zeile :
procedure TExtStringGrid.SetCellInteger(ACol, ARow: integer;
const Value: integer); var st : string; Rect : TRect; begin FCellInteger := Value; Cells [ACol,ARow] := IntToStr(value); Rect := CellRect(ACol,ARow); Canvas.FillRect(Rect); st := 'Test'; InflateRect(rect,-2,-2); DrawText(Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT); end;
Delphi-Quellcode:
tut sich offensichtlich nichts mehr. Der übergebene Zahlenwert steht in den Zellen. Die Rect-Koordinaten stimmen, aber von 'Test' ist absolut nichts zu sehen. Was ist da falsch ? :gruebel:
Cells [ACol,ARow] := IntToStr(value);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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