Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Text im StringGrid rechtsbündig ausrichten
Tino - Di 21.01.03 01:42
Letztendlich musst Du das OnDraw-Event benutzen (wie es in dem o. g. Beispiel auch ist) oder Du erstellst eine Ableitung von tStringGrind. Ich würde Dir aber zu dem ersten Weg raten. Also das OnDraw-Event benutzen und mit der Methode TextOut den Text selbst zeichnen. Wie das geht steht auf der o. g. Website!
Gruß
TINO
CenBells - Di 21.01.03 17:10
Wie Tino schon sagt.
Steht auf obiger Seite. Und einfacher geht es nicht. Ist die eleganteste Lösung. Wenn du was nicht verstehst, dann Poste es doch hier. Es werden sich schon genug freiwillige finden, es dir zu erklären.
Gruß
Ken
grayfox - Mi 22.01.03 01:51
hallo ace!
klar gehts einfacher, nimm eine komponente, die die felder bereits ausrichten kann. dann brauchst du dich nicht damit herumzuschlagen :wink:
mfg, stefan
Delete - Mi 22.01.03 03:04
Also das ist ja nun wirklich nicht schwer. Desweiteren exitiert hier im Forum schon Code dazu. Ein Schnipsel müßte sogar von mir sein.
Und wenn ich für jeden kleinen Fliegendreck eine Komponente nehme... und dann wo möglich noch sagen: "Das hab eich programmiert." Wo es docvh eigentlich heißen müßte: "Das habe ich zusammengeklickt." Kein Wunder, dass Delphi-Programmierer unter C/C++ Programmieren so eine klickibunti Ruf haben. :roll:
Tino - Mi 22.01.03 10:27
Luckie hat folgendes geschrieben: |
Und wenn ich für jeden kleinen Fliegendreck eine Komponente nehme... |
DU brauchst für solche kleinen Dinge keine Komponente nehmen wenn DU nicht möchtest.
Luckie hat folgendes geschrieben: |
und dann wo möglich noch sagen: "Das hab eich programmiert." |
Jetzt halt Dich mal ein wenig zurück. Du kannst hier nicht von jedem der fremde "fleigendreck" Komponenten benutzt so etwas behaupten. Wenn jemand für noch so kleine Erweiterungen Komponenten benutzen möchte ist das sein gutes Recht!
Gruß
TINO
wunsiedler - Di 16.09.03 13:41
Oh mann ! Genau das bräucht ich auch. Den Code kapier ich aber überhaupt nicht! :cry:
Tino - Di 16.09.03 15:36
wunsiedler hat folgendes geschrieben: |
Den Code kapier ich aber überhaupt nicht! :cry: |
Und was genau verstehst du nicht?
Gruß
Tino
wunsiedler - Di 16.09.03 19:05
Irgendwie kapier is das ganze Ding nicht. Ist denn wirklich soviel notwendig um in einem StringGrid den Text links, mittig oder rechts auszurichten?
Hab schon mal 'OnDraw' Event mit 'TextOut' ausprobiert, haut aber net hin.
Gibt's da net einfach ne Eigenschaft die das macht?
kasi - Di 16.09.03 20:27
Vielleicht ist es so besser verständlich
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure WriteTextAligned(Canvas: TCanvas; Rect: TRect; Alignment: TAlignment; Text: string); var xPos, yPos: integer; begin xPos := Rect.Left + 2; yPos := Rect.Top + 2; with Canvas do begin case Alignment of taRightJustify : xPos := Rect.Left + (Rect.Right - Rect.Left - TextWidth(Text) - 2); taCenter : xPos := Rect.Left + ((Rect.Right - Rect.Left - TextWidth(Text) - 2) div 2); end; TextRect(Rect, xPos, yPos, Text); end; end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if ACol in [1,3] then begin WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taCenter, TStringGrid(Sender).Cells[Acol, ARow]); exit; end; if ACol in [2,4] then begin WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taRightJustify, TStringGrid(Sender).Cells[Acol, ARow]); exit; end; WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taLeftJustify, TStringGrid(Sender).Cells[Acol, ARow]); end; |
KASI
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
wunsiedler - Di 16.09.03 23:44
...und wohin damit? ich sprech mein stringgrid mit
stringgrid1.cells[x,y] := blabla;
an.
Tino - Mi 17.09.03 08:58
wunsiedler hat folgendes geschrieben: |
Irgendwie kapier is das ganze Ding nicht. Ist denn wirklich soviel notwendig um in einem StringGrid den Text links, mittig oder rechts auszurichten? |
So viel Code ist das gar nicht. Man muss beim Programmieren auch manchmal programmieren :-)
wunsiedler hat folgendes geschrieben: |
Hab schon mal 'OnDraw' Event mit 'TextOut' ausprobiert, haut aber net hin. |
Dann zeig mal den Code. Wenn selbst das mit TextOut nicht funktioniert hat brauchen wir mit dem anderen Code gar nicht erst anfangen. Also... zeig mal wie du das mit dem Textout gemacht hast.
wunsiedler hat folgendes geschrieben: |
Gibt's da net einfach ne Eigenschaft die das macht? |
Um diese Frage zu beantworten reicht ein Blick in die Delphi-Hilfe.
Gruß
TIno
wunsiedler - Mi 17.09.03 09:46
Ich hab das halt einfach mal ausprobiert:
Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.sg1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin sg1.Canvas.TextOut(100,100,'XXX'); end; |
Der schreibt dann bei 100/100 'xxx' rein. klar.
Meine normale Routine füllt das SG ganz normal. 'XXX' wird bei 100/100 über meine Daten darübergeschrieben. xxx wird nicht mitgescrollt. Muss ich wohl das ganze SG mit diesem Textout dann 'zeichnen'?
Meine spalten sind unterschiedlich breit.
Spaltenbreite kann zur Laufzeit verändert werden.
Keldorn - Mi 17.09.03 10:03
Sorry, aber so wie du die Sache angehst, hats keinen Sinn.
Es gibt im Forum bereits mehrere Post, die sich mit dem Thema befassen und in der Onlinehilfe steht auch viel drin, daß muß man sich aber auch mal durchlesen.
online hilfe hat folgendes geschrieben: |
Der Parameter Rect beschreibt die Position der Zelle in der Zeichenfläche.
|
du arbeitest mit einer festen Position 100x100, der Text wird nie mit gescrollt.
also wenn dann so
Delphi-Quelltext
1:
| sg1.Canvas.TextOut(rect.left+2,rect.top+2,sg1.cells[acol,arow]); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!