Autor Beitrag
Lemon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 96

Win XP
D5 Standart
BeitragVerfasst: Di 02.12.03 15:13 
hallo,

die zeile in meinem stringgrid hat die heohe 16 und die breite 300. wenn jetzt aber mehr text in der zeile steht, so wird er nicht mehr ganz angezeigt.

ich haette gerne, dass sich dann die zeilenhoehe aendert und der text mehrzeilig angezeigt wird! wie geht das???

lemon

Moderiert von user profile iconTino: Titel geändert. Topic verschoben.
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 02.12.03 16:04 
Hallo
das was du brauchst, ist selber zeichen im Ondrawcell-ereignis und drawtext (einfach in delphi reinschreiben und F1, dann sind die Zeichenflags erklärt)
im Forum gibt es auch einige threads Suche in: Delphi-Forum, Delphi-Library MEHRZEILIG wo auch Beispiele drin sind.
du kannst mit drawtext und Flag Calcrect kannst du auch die Höhe des zu zeichnenden mehrzeiligen Textes ermitteln, deine Zeilenhöhe entpsprechend anpassn (stringgrid.rowheights[Zeile]) und zeichnest den text dann wieder mit drawtext und ohne calcrect.
is nicht schwierig. Ein Beipiel liegt zu Hause ;) wenn immer noch was unklar ist, mußt du dich nochhmal melden

Mfg Frank

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

Win XP
D5 Standart
BeitragVerfasst: Do 04.12.03 15:08 
kannst du mir den quelltext schicken????
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: Do 04.12.03 19:28 
ok, hier ein schnippsel:
Der code ist speziell auf mein damaliges Bedürfnis zugeschnitten, deshlab ein paar Anmerkung: nur die 3. Spalte wird berücksichtigt, und die Zeilenhöhe wird nur einmal beim Füllen ermittelt und das Grid war nicht zum Eingeben gedacht.
mußte mal schauen
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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
//proc in den private abschnitt der form mirtaufnehmen
procedure TForm1.Stringgrid_OptimaleZeilenhoehen(Stringgrid:Tstringgrid);
//die einzelnen Zeilenhöhen des Stringgrids bestimmen (nur 3. Spalte wird berücksichtigt)
Var arow:integer;
    rect:trect;
    s:string;
  begin
    with StringGrid do
      begin
        for arow:=1 to RowCount-1 do
          begin
            s:=cells[2,arow];
            //die Höhe der Zelle bestimmen (Zellenrechteck übergeben, benötigte Höhe wird durch Drawtext+calcrect ermittelt
            rect := CellRect(2,arow);
            DrawText(canvas.handle,Pchar(s),length(s),rect,DT_CALCRECT+DT_WORDBREAK );
            RowHeights[arow]:=rect.Bottom-rect.Top+3;
          end;
      end;
  end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var S:string;
  begin
    with Sender as TStringGrid do
      begin
        s:=cells[acol,arow];
        //Hintergrund
        Canvas.brush.color:=color;
        if (GDfixed in State) then canvas.brush.color:=fixedcolor;

        canvas.fillrect(rect);

        rect.Left:=rect.left+2;
        rect.top:=rect.top+2;
        //wenn Text einzeilig ist, Vertical zentriert, sonst mehrzeilig darstellen
        if canvas.TextWidth(s) < (rect.right-rect.Left) then
          DrawText(canvas.handle,Pchar(s),length(s),rect,DT_SINGLELINE or DT_TOP)
         else
          DrawText(canvas.handle,Pchar(s),length(s),rect,DT_WORDBREAK );
      end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //zum testen
  StringGrid1.Cells[2,1]:='dies ist ein Test1';
  StringGrid1.Cells[2,2]:='dies ist ein Test1 dies ist ein Test2 ';
  StringGrid1.Cells[2,3]:='dies ist ein Test1 dies ist ein Test2 ';
  StringGrid1.Cells[2,4]:='dies ist ein Test1 dies ist ein Test2 dies ist ein Test3 ';
  Stringgrid_OptimaleZeilenhoehen(StringGrid1);
end;


Mfg Frank

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