AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zeilenumbruch innerhalb von einer Stringgrid-Zelle
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilenumbruch innerhalb von einer Stringgrid-Zelle

Ein Thema von Martoeng · begonnen am 29. Okt 2004 · letzter Beitrag vom 4. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Martoeng

Registriert seit: 21. Jun 2004
44 Beiträge
 
#1

Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 29. Okt 2004, 10:30
Hi Leute,

hab mal eine Frage (<-- unerwartet, ne? :


Also, ich habe mir zur Datensicherung ein kleines Dump-Programm geschrieben.

Die Sicherung ist auch kein Problem.
Vielleicht etwas merkwürdig, aber es funktioniert:

die Felder werden mit der Zeichenfolge "~;" getrennt.

Da jede Zeile in der Sicherungs-Datei (*.dat) einen eigenen Datensatz darstellt, müssen Zeilenumbrüche, die in Memo-Felder der DB gespeichert sind, ersetzt werden. Dazu habe ich die Zeichenfolge "~#" gewählt.


Jetzt möchte ich, dass man sich diese Sicherungen angucken und ggf. einzelne DS wieder herstellen kann.

Also muss die Zeichenfolge "~#" wieder durch #13#10 ersetzt werden.

Das habe ich so gemacht:
Delphi-Quellcode:
//Zeichenfolge "~#" wieder durch #13#10 ersetzen (RETURN)
for xy := 0 to length(s)-1 do
begin
  if (s[xy] = '~') AND (s[xy+1] = '#') THEN
  begin
    s[xy] := #13;
    s[xy+1] := #10;
  end;
end;
delete(s,1,1); //erstes Zeichen löschen
target.Cells[x,y] := s //target = stringgrid
Doch bei mir erscheinen an den Stellen der Zeilenumbrüche nur genau 4 senkrechte schwarze Balken.

Ich dachte auch schon, dass ein normaler String (s) keine zeilenumbrüche verträgt und bin deshalb einen Umweg über ein Memo gegangen, hat aber auch nicht geklappt .

Weiss vielleicht jemand, wo der Fehler liegt?

MfG Martoeng
  Mit Zitat antworten Zitat
Meister_Kika

Registriert seit: 19. Sep 2003
4 Beiträge
 
#2

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 29. Okt 2004, 10:49
1.

Delphi-Quellcode:
var I : integer;

begin
  i := pos('~#',S);
  while i <> 0 do
  begin
    Delete(S,i,2);
    Insert(#13#10,s,i);
    i := pos('~#',S);
  end;
  delete(s,1,1); //erstes Zeichen löschen
   <- ist schneller als deine funk.
  2. das grid malt auf einen canvas.
     d.h #13#10 wird als Pipe | dargestellt.
     musst also die draw routine verbiegen

   als bespiel :
   procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
          ARow: Integer; Rect: TRect; State: TGridDrawState);
   var s : string;
       x : integer; //abstand zur nächsten zeile
   begin
       s := target.Cells[ACol,ARow] ;
       while pos(#13#10,s) <> 0 do
       begin
         canvas.textout(Rect.X + x,Rect.Y,copy(S,1,pos(#13#10)-1);
         delete(s,1,pos(#13#10)+1);
         x:= x + canvas.TextHeight(S);
      end;
     canvas.textout(Rect.X + x,Rect.Y,s); //rest zeichen
   end;
was du noch einbauen mußt ist die höhe der zelle sonst mal der ins nirvana.

[edit=sakura] [delphi]Tags Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 29. Okt 2004, 11:24
hallo meister kika verwende doch bitte die delphi tags wegen der übersichtlichkeit!
ansonsten herzlich willkommen bei dp
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#4

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 29. Okt 2004, 13:29
Tut mir Leid, aber TStringGrid kann keine Zeilenumbrücke - selbst wenn der Steuercode für einen Zeilenumbruch im Feldinhalt enthalten ist, werd dennoch nicht's umgebrochen ... Steuercodes werden einfach übersprungen.

Du kannst das höchstens über OnDrawCell selber zeichnen/schreiben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 29. Okt 2004, 14:23
^himitsu hat recht im ereignis ondrawcell-ereignis musst du die zelle überschreiben:

1. windows sdk mit drawtext ist dein freund mit dt_calcrect, dt_wordbreak und dt_left, zur ermittlung der höhe
2. neue höhe der zelle auf die zeile anwenden
3. zeile neu zeichnen wieder mit drawtext

so sollte es gehen!
  Mit Zitat antworten Zitat
Martoeng

Registriert seit: 21. Jun 2004
44 Beiträge
 
#6

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 1. Nov 2004, 07:38
Einen schönen Montag- Morgen ,

Hmm, danke für die Antworten...

klingt ja alles ganz schön kompliziert, nur für ein paar Zeilenumbrüche...

Wenn ich mich recht erinnere, habe ich aber früher schon Zeilenumbrüche in ein Stringgrid gedrängt. Da habe ich einfach den text eines Memos übernommen und die Zeilenumbrüche waren an den richtigen Stellen noch vorhanden. Es wurde zwar nicht der ganze Text gezeichnet (je nachdem wie hoch die Zelle ist), aber das ist auch unwichtig, da der Text später nur möglichst einfach in ein DB-Memo eingefügt werden soll.

Genauso hat es auch schon geklappt, dass ich Text aus einer Tabelle (Feldtyp: longtext, MySQL) in ein Stringgrid geladen habe und auch da wurden die Zeilenumbrüche "mitgenommen".

Also wird das schon nicht völlig unmöglich sein, oder ?

Naja, ich werde nochmal rumprobieren, vielleicht komm ich ja noch drauf...


Danke trotzdem...
MfG


Martoeng
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#7

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 1. Nov 2004, 08:44
natürlich ist es möglich komponenten in ein stringgrid zu platzieren, für ein bisschen text sollte das aber mit kanonen auf spatzen geschossen sein!
  Mit Zitat antworten Zitat
Martoeng

Registriert seit: 21. Jun 2004
44 Beiträge
 
#8

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 1. Nov 2004, 08:51
???

Komponenten im Stringgrid platzieren?
Sowas geht?

Ne, wusste ich bis heute nicht, dass das geht, und ich würde behaupten, ich habe das auch nie gemacht. (zumindest nicht bewusst)

Ich habe das Programm nochmal rausgesucht, in dem ich diese Zeilenumbrüche schon hatte.

Da hatte ich halt ein Memo, in das Text eingegeben wurde und mit

Strgrid1.Cells[3, Strgrid1.RowCount-1] := Memo1.Text; in das Stringgrid eingefügt. Da wurden alle Zeilenumbrüche, egal ob manuell oder automatisch, mit übernommen.

Wie bekomme ich es also hin, diese Zeilenumbrüche selbst in ein Stringgrid einzutragen?
Nochmals, der Text muss nicht voll lesbar sein, er muss nur in der Zelle komplett vorhanden sein...


MfG & Thx

Martoeng
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 1. Nov 2004, 09:09
guckst du: komponente in stringgrid platzieren!
  Mit Zitat antworten Zitat
Martoeng

Registriert seit: 21. Jun 2004
44 Beiträge
 
#10

Re: Zeilenumbruch innerhalb von einer Stringgrid-Zelle

  Alt 1. Nov 2004, 09:13
Juchuu, ich habs:


Einfach in die DrawCell:

Delphi-Quellcode:
var
  s : string;
begin
  s := strgr_ansicht.Cells[ACol, ARow];

  strgr_ansicht.Canvas.FillRect(Rect);
  
  DrawText(strgr_ansicht.canvas.Handle, PChar(s), Length(s), Rect, DT_left+DT_Vcenter);
end;
Fragt mich nicht, warum, aber jetzt werden die #13#10 auch als Zeilenumbruch gehandhabt...



Also danke für die Hilfen (und es geht doch! )


MfG

Martoeng
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz