| Autor |
Beitrag |
reddevil
      
Beiträge: 23
|
Verfasst: Mo 02.12.02 22:15
Wie kann ich in eine Zelle mehrere zeilen schreiben .. mit
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 Tino: Code-Tags hinzugefügt.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
Quelltext
Dimension des Ausgaberechtecks ermitteln (wird in outRect zurückgegeben):
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:
Quelltext 1:
| DrawText(Stringgrid1.Canvas.Handle,PChar(SText),length(SText),outRect,DT_Center or DT_WordBreak); |
Text einzeilig und zentriert im Recteck outRect ausgeben:
Quelltext 1:
| DrawText(Stringgrid1.Canvas.Handle,PChar(SText),length(SText),outRect,DT_VCenter or DT_Center or DT_SingleLine); |
|
Gruß
TINO
|
|
reddevil 
      
Beiträge: 23
|
Verfasst: Di 03.12.02 20:06
danke an beide
btw Keldorn bin aus oschatz :p
|
|
reddevil 
      
Beiträge: 23
|
Verfasst: Di 03.12.02 22:08
das mit dem STEXT versteh ich nicht 
|
|
reddevil 
      
Beiträge: 23
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
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 
      
Beiträge: 23
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 04.12.02 17:45
Schau Dir mal in der Hilfe die Eigenschaften an. Dort findest Du eine namens DefaultDrawing!
Gruß
TINO
|
|
DataCool
      
Beiträge: 112
|
Verfasst: 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
Danke
_________________ DataCool
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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
      
Beiträge: 112
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 07.02.03 13:39
also mein Code liegt zu Hause auf der Festplatte.  , 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
      
Beiträge: 112
|
Verfasst: Fr 07.02.03 17:08
Hier der Code :
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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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):
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
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
      
Beiträge: 112
|
Verfasst: Mo 10.02.03 10:13
Hi,
irgentwie komm ich auch nicht mit Deinem Code weiter
Kannst Du mir das genauer erklären bzw. Source-Code posten
Danke
_________________ DataCool
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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:
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
      
Beiträge: 112
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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
      
Beiträge: 112
|
Verfasst: Mo 10.02.03 13:39
Hi,
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
|
|