Autor Beitrag
reddevil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mo 02.12.02 22:15 
Wie kann ich in eine Zelle mehrere zeilen schreiben .. mit
ausblenden Quelltext
1:
StringGrid1.Cells[1,1]:='Hallo blah' + #13#10 + 'blubb dibums lalala';					

bin ich gescheitert :(

So und zweitens .. wie kann ich verhindern das der benutzer eine zelle auswählen kann .. also dieses lästige "kästchen" was man bewegen kann ausschalten

plz help

//red

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
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: Di 03.12.02 08:56 
Hallo,

zum ersten Punkt kann ich dir auf die Schnelle nix sagen

zum zweiten: schau dir das OnSelectCell - ereignis an. wenn du dort canselect auf false stellst, kann die Zelle nciht angewählt werden.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
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 03.12.02 10:24 
Zu Deiner ersten Frage habe ich in meinem kleinen FAQ Archiv etwas gefunden. Die Quelle ist mir leider nicht (mehr) bekannt:
ungekannte Quelle hat folgendes geschrieben:
Dazu muß man das Zeichnen der Zelleninhalte selber übernehmen. Zu diesem Zweck schreibt man eine Methode für das OnDrawCell-Ereignis des StringGrids. In dieser Methode kann man direkt auf das Ausgaberechteck der jeweiligen Zelle zugreifen, es wird in der Variablen "Rect" übergeben.

Für die Ausgabe von mehrzeiligem Text ist "DrawText" ist die Funktion der Wahl. Mit dem Parameter DT_CalcRect kann man die Größe des Ausgaberechtecks ermitteln, der Parameter DT_WordBreak sorgt für den Zeilenumbruch.

Hier mal ein paar Beispielzeilen:
ausblenden Quelltext
1:
2:
var
  outRect : Rect;

Dimension des Ausgaberechtecks ermitteln (wird in outRect zurückgegeben):
ausblenden Quelltext
1:
DrawText(Stringgrid1.Canvas.Handle,PCHar(SText),length(SText),outRect,DT_CalcRect or DT_WordBreak or DT_NoClip);					

Text mehrzeilig und horizontal zentriert im Recteck outRect ausgeben:
ausblenden Quelltext
1:
DrawText(Stringgrid1.Canvas.Handle,PChar(SText),length(SText),outRect,DT_Center or DT_WordBreak);					

Text einzeilig und zentriert im Recteck outRect ausgeben:
ausblenden Quelltext
1:
DrawText(Stringgrid1.Canvas.Handle,PChar(SText),length(SText),outRect,DT_VCenter or DT_Center or DT_SingleLine);					



Gruß
TINO
reddevil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 03.12.02 20:06 
danke an beide :)

btw Keldorn bin aus oschatz :p
reddevil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 03.12.02 22:08 
das mit dem STEXT versteh ich nicht :(
reddevil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 03.12.02 22:47 
wenn ich das in ein ondrawcell ereignis packe zecihnet er das ja in jeder zelle :/ .. und wo sind die DT_* konstanten definiert/erklärt? .. und gibt es ne möglichkeit, das ich an das ondrawcell ereignis noch 3 paramter mehr übergebe .. also col .. row .. und stext .. damit ich dann irgendwie sagen kann in welche zeile und spalte er nur den text schreiben soll

plz help

//red
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 04.12.02 08:47 
reddevil hat folgendes geschrieben:
das mit dem STEXT versteh ich nicht :(

SText ist eine String-Variable. Diese musst Du natürlich vor dem Aufruf von DrawText einen gültigen Wert zuweisen. Also ungefähr so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);
Var
  SText: String;
begin
  SText := StringGrid1.Cells [Col, Row];
  DrawText (
      Stringgrid1.Canvas.Handle,
      PCHar (SText),
      Length (SText),
      Rect,
      DT_CalcRect or DT_WordBreak or DT_NoClip
   );
end;

Den Code habe ich nicht getestet!

Gruß
TINO
reddevil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mi 04.12.02 13:45 
wenn ich jetzt das ereignis durch z.b.
StringGrid1.Cells[1, 1] := 'test';
auslöse, zeichnet er beides .. das unformatierte und das Drawtext(...)
wie kann ich das "erste" abfangen?
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 04.12.02 17:45 
Schau Dir mal in der Hilfe die Eigenschaften an. Dort findest Du eine namens DefaultDrawing!

Gruß
TINO
DataCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Fr 07.02.03 12:27 
Hi Leute,

ich weiss nicht, ob ich zu blöd bin :?

Aber ich bekomme das anhand eures Sourcecode nicht hin.

Kann jemand mal bitte eine funtionierende Lösung posten :roll:

Danke

_________________
DataCool
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: Fr 07.02.03 12:43 
Hallo,

ich weiß nicht mehr, welches Codeschnipsel ich genommen habe, bei mir hats bestens funktioniert.

Kommst besser, wenn du mal dein Ondrawcell-ereignis postest und uns sagst, was nicht geht

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
DataCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Fr 07.02.03 13:23 
Hi,

ich habe einfach den Code von Tino(s. weiter oben) genommen und die Eigenschaft DEfaultDrawing auf false gesetzt !.

Wenn ich jetzt einer Celle des Stringgrids einen Text zuweise, passiert gar nichts.

Auperdem sind alle Cellen des Grids mit der Farbe der Eigenschaft Color gefüllt !.

Hast Du deinen Code nicht mehr ? Wäre echt sehr wichtig !

_________________
DataCool
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: Fr 07.02.03 13:39 
also mein Code liegt zu Hause auf der Festplatte. 8) , da komm von arbeit raus schlecht ran ...

Zitat:

Wenn ich jetzt einer Celle des Stringgrids einen Text zuweise, passiert gar nichts.

das Ondrawcellereignis hast du richtig zugeordnet?

Poste dein Ondrawcell-ereignis und wir schauen mal.

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
DataCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Fr 07.02.03 17:08 
Hier der Code :
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState); 
Var 
 SText: String; 
begin 
 SText := StringGrid1.Cells [Col, Row]; 
 DrawText ( 
   Stringgrid1.Canvas.Handle, 
   PCHar (SText), 
   Length (SText), 
   Rect, 
   DT_CalcRect or DT_WordBreak or DT_NoClip 
  ); 
end;

_________________
DataCool
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: Sa 08.02.03 20:58 
Hallo

lies dir durch, was Tino geschrieben hat und schau dir DrawText in der OH an

Tino hat folgendes geschrieben:

Dimension des Ausgaberechtecks ermitteln (wird in outRect zurückgegeben):
ausblenden Quelltext
1:
2:
Code:
DrawText(Stringgrid1.Canvas.Handle,PCHar(SText),length(SText),outRect,DT_CalcRect or DT_WordBreak or DT_NoClip);


wenn du DT_Calcrect angibst, wird das Rechteck ermittelt.
Nimm das zum Zeichnen des Textes raus.

wenn du defaultdrawing auf False setzt, bist du komplett selbst für das Zeichnen im Grid (Hintergründe für fixierte und normale spalten zuständig), nur den Text ausgeben reicht nicht. Ich persönlich laß Defaultdrawing true, da das komplette Zeichen (z.B. 3D Splaten) ein wenig nervig ist
kleines Beispiel
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
  Rect: TRect; State: TGridDrawState);
Var
SText: String;
  begin
   //Zellhintergrund
   if gdfixed in state then StringGrid1.canvas.brush.Color := StringGrid1.FixedColor
                       else StringGrid1.canvas.brush.Color := StringGrid1.Color;
   StringGrid1.canvas.FillRect(rect);

   //text ausgeben
   SText := StringGrid1.Cells [Col, Row];
   DrawText (
      StringGrid1.Canvas.Handle,
      PCHar (SText),
      Length (SText),
      Rect,
      DT_WordBreak or DT_NoClip
      );
  end;

eine Forumsuche zu Ondrawcell hilft dir auch weiter.
Mfg Frank[/quote]

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
DataCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mo 10.02.03 10:13 
Hi,

irgentwie komm ich auch nicht mit Deinem Code weiter :bawling: :bawling:

Kannst Du mir das genauer erklären bzw. Source-Code posten

Danke

_________________
DataCool
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: Mo 10.02.03 10:39 
bei mir geht der code.
oh, da fällt mir noch was ein, welche Delphi-Version hast du?
bei D5 sähe das so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var
SText: String;
  begin
   ...
   //text ausgeben
   SText := StringGrid1.Cells [aCol, aRow];
   ...

dort heißt es jetzt acol und Arow um nicht mit den Eigenschaften col und Row des StringGrids zu kollidieren.

Zitat:

Kannst Du mir das genauer erklären

was verstehts du denn nicht?

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
DataCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mo 10.02.03 11:47 
Hi,

ja Du hast recht ! Ich benutze D5 Enterprise !

Aber Col u. Row hatte ich schon auf ACol und aRow geändert, sonst hätte ich ja auch nicht compilieren können.

DEfaultDrawing ist bei mir jetzt auf TRue ?!

Das GRid zeichnet er ja jetzt auch, aber keinen Text bzw. Zeilenumbruch !

_________________
DataCool
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: Mo 10.02.03 12:04 
das ondrawereignis ist richtig zugeordnet?
mal nen haltepunkt gesetzt, um zu prüfen, ob die Proc überhaupt angesprochen wird?

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
DataCool
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mo 10.02.03 13:39 
Hi,

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var SText: String; 
begin 
  //Zellhintergrund 
  if gdfixed in state then 
    StringGrid1.canvas.brush.Color := StringGrid1.FixedColor 
  else
    StringGrid1.canvas.brush.Color := StringGrid1.Color; 
  StringGrid1.canvas.FillRect(rect); 

  StringGrid1.Canvas.Brush.Color := clBlack;  //StringGrid1.Color;
  //StringGrid1.Canvas.Pen.Color := clBlack;
  //text ausgeben
  SText := StringGrid1.Cells [ACol, ARow]; 
  DrawText ( 
   StringGrid1.Canvas.Handle, 
   PCHar (SText), 
   Length (SText), 
   Rect, 
   DT_WordBreak or DT_NoClip
   ); 
end;


So funktioniert es jetzt aber die Schrift ist immer weiss, ich bin jetzt nur darauf gekommen, weil die Brush.Color zu TEst auf clBlack gesetzt habe.

Wenn ich Canvas.Pen.Color auf eine andere Farbe setzte interessiert Ihn das nicht er zeichnet immer nur weiss

_________________
DataCool