Text im StringGrid rechtsbündig ausrichten
spacer
Autor Nachricht
AceTheFace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Veteran
Beiträge: 9838
Erhaltene Danke: 42

Win 2000/XP/Vista/7
Delphi 2007
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1529

Win XP, Debian 3.1
D7 Pro
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: 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:

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Veteran
Beiträge: 9838
Erhaltene Danke: 42

Win 2000/XP/Vista/7
Delphi 2007
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
wunsiedler
ontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 505
Erhaltene Danke: 3

Win7

BeitragVerfasst: Di 16.09.03 13:41 
Oh mann ! Genau das bräucht ich auch. Den Code kapier ich aber überhaupt nicht! :cry:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Veteran
Beiträge: 9838
Erhaltene Danke: 42

Win 2000/XP/Vista/7
Delphi 2007
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
wunsiedler
ontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 505
Erhaltene Danke: 3

Win7

BeitragVerfasst: 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?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
kasi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Win XP
D5 Ent
BeitragVerfasst: Di 16.09.03 20:27 
Vielleicht ist es so besser verständlich
ausblenden volle Höhe Delphi-Quelltext markieren
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// Standard verhalten
yPos := Rect.Top + 2// Standard verhalten
with Canvas do
  begin
  //yPos := Rect.Top + ((Rect.Bottom - Rect.Top - TextHeight(Text)) div 2); // vertikal Zentriert
  case Alignment of // x-Position berechnen
    taRightJustify : // Breite von Rect - Länge Text - 2 = linker Abstand
      xPos := Rect.Left + (Rect.Right - Rect.Left - TextWidth(Text) - 2);
    taCenter : // Breite von (Rect - Länge Text - 2) durch 2 = linker Abstand
      xPos := Rect.Left + ((Rect.Right - Rect.Left - TextWidth(Text) - 2div 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,3then
  begin  // Spalte 1 und 3 zentriert
  WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taCenter, TStringGrid(Sender).Cells[Acol, ARow]);
  exit;
  end;
if ACol in [2,4then
  begin // Spalte 2 und 4 rechtsbündig
  WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taRightJustify, TStringGrid(Sender).Cells[Acol, ARow]);
  exit;
  end;
// Alle anderen Spalten linksbündig
WriteTextAligned(TStringGrid(Sender).Canvas, Rect, taLeftJustify, TStringGrid(Sender).Cells[Acol, ARow]);
end;

KASI

Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
wunsiedler
ontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 505
Erhaltene Danke: 3

Win7

BeitragVerfasst: Di 16.09.03 23:44 
...und wohin damit? ich sprech mein stringgrid mit

stringgrid1.cells[x,y] := blabla;

an.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Veteran
Beiträge: 9838
Erhaltene Danke: 42

Win 2000/XP/Vista/7
Delphi 2007
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
wunsiedler
ontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 505
Erhaltene Danke: 3

Win7

BeitragVerfasst: Mi 17.09.03 09:46 
Ich hab das halt einfach mal ausprobiert:

ausblenden Quelltext markieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2258
Erhaltene Danke: 2

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ausblenden Delphi-Quelltext markieren
1:
sg1.Canvas.TextOut(rect.left+2,rect.top+2,sg1.cells[acol,arow]); 

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home