Autor |
Beitrag |
AceTheFace
      
Beiträge: 39
|
Verfasst: Di 21.01.03 00:54
Hallo,
wie schaffe ich das?
Habe zwar folgenden Code schon im Netz gefunden, aber es muss doch auch einfacher gehen, oder?!
http://www.swissdelphicenter.ch/de/showcode.php?id=422
Gruß,
Ace
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: 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
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: 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
mfg, stefan
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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. 
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
      
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: Di 16.09.03 13:41
Oh mann ! Genau das bräucht ich auch. Den Code kapier ich aber überhaupt nicht! 
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 16.09.03 15:36
wunsiedler hat folgendes geschrieben: | Den Code kapier ich aber überhaupt nicht!  |
Und was genau verstehst du nicht?
Gruß
Tino
|
|
wunsiedler
      
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: 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
      
Beiträge: 37
Win XP
D5 Ent
|
Verfasst: Di 16.09.03 20:27
Vielleicht ist es so besser verständlich
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
      
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: Di 16.09.03 23:44
...und wohin damit? ich sprech mein stringgrid mit
stringgrid1.cells[x,y] := blabla;
an.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
      
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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]); |
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|