Autor Beitrag
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
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
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
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 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
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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



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:
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
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
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

BeitragVerfasst: Di 16.09.03 13:41 
Oh mann ! Genau das bräucht ich auch. Den Code kapier ich aber überhaupt nicht! :cry:
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
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
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

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?
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
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 user profile iconTino: Code- durch Delphi-Tags ersetzt.
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

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

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

an.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
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
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

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
1:
sg1.Canvas.TextOut(rect.left+2,rect.top+2,sg1.cells[acol,arow]);					

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)