AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

doppelte Zeilenhöhe im Stringgrid

Ein Thema von Hansa · begonnen am 24. Nov 2004 · letzter Beitrag vom 25. Nov 2004
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

doppelte Zeilenhöhe im Stringgrid

  Alt 24. Nov 2004, 23:43
Hi,

wie kann ich gemischt einfach- und doppelthohe Zeilen in einem Stringgrid realisieren ? Geht das überhaupt ? Ich habe mal folgendes probiert :

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (StringGrid1.Row mod 2 = 0) then begin
    StringGrid1.RowHeights [ARow] := StringGrid1.DefaultRowHeight*2;
    StringGrid1.Cells [2,StringGrid1.Row] := 'doppelt hoch';
  end
  else begin
    StringGrid1.RowHeights [ARow] := StringGrid1.DefaultRowHeight;
    StringGrid1.Cells [2,StringGrid1.Row] := 'einfach hoch';
  end;
  StringGrid1.RowCount:=StringGrid1.RowCount+1;
end;
Das wirkt sich allerdings auf das gesamte Grid aus. Es werden also alle Zeilen neu gezeichnet, abwechselnd einfach und doppeltt hoch. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: doppelte Zeilenhöhe im Stringgrid

  Alt 25. Nov 2004, 00:03
Moin Hansa,

wieso, geht doch:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ARow mod 2 = 0 then begin
    StringGrid1.RowHeights [ARow] := StringGrid1.DefaultRowHeight*2;
  end else begin
    StringGrid1.RowHeights [ARow] := StringGrid1.DefaultRowHeight;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  iIndex: Integer;
begin
  for iIndex := 0 to StringGrid1.RowCount-1 do begin
    if iIndex mod 2 = 0 then begin
      StringGrid1.Cells [2,iIndex] := 'doppelt hoch';
    end else begin
      StringGrid1.Cells [2,iIndex] := 'einfach hoch';
    end;
  end;
end;
Du musst halt statt StringGrid1.Row ARow verwenden, da Du sonst immer den gleichen Wert abfragst, und nicht den der gerade gezeichneten Zeile.
Ausserdem solltest Du nicht im OnDrawCell einer Zelle einen Wert zuweisen, dann wird wieder neu gezeichnet.
Das flackert dann "so schön".

Wozu eigentlich

StringGrid1.RowCount:=StringGrid1.RowCount+1; Das ist eine Endlosschleife.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: doppelte Zeilenhöhe im Stringgrid

  Alt 25. Nov 2004, 00:53
Thx Christian,

sieht gut aus. Das mit dem Flackern fiel mir auch schon auf. Aber mir Deinem Code flackert eigentlich nichts. Jetzt sind aber noch folgende Fragen aufgetaucht :

1. ich kriege keine 2 Zeilen in die doppelt hohen Zellen. Das war eigentlich der Sinn des Ganzen.
2. Du legst die Spaltenhöhe bereits im FormCreate fest. Vielleicht flackert es auch deshalb nicht. Wo soll ich das am besten hinmachen, wenn die Zeilenhöhe erst zur Laufzeit feststeht ?
3. Du benutzt ja selber das OnDrawCell und nichts flackert, was jetzt ? bzw. wo geht das besser ?

Zitat:
StringGrid1.RowCount:=StringGrid1.RowCount+1;

Das ist eine Endlosschleife.
Wieso das ?

Wenn ich die rechteste Spalte verlasse, dann soll eine neue Zeile erzeugt werden und der Cursor dort in die erste Spalte wandern. So siehts richtig aus :

Delphi-Quellcode:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then begin
    case Stringgrid1.Col of
      1 : Stringgrid1.Col := 4;
      4 : begin
            Stringgrid1.Col := 1;
            Stringgrid1.RowCount := Stringgrid1.RowCount + 1;
            Stringgrid1.Row := Stringgrid1.Row + 1;
          end;
    end;
  end;
end;
Habe ich da was übersehen ?

P.S.: oh je, da habe ich noch was übersehen. 8) Geht es auch, die Zeilenhöhe in Abhängigkeit von dem eingegeben Wert in Spalte 1 zu verändern ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: doppelte Zeilenhöhe im Stringgrid

  Alt 25. Nov 2004, 07:58
Zitat von Hansa:
Thx Christian,

1. ich kriege keine 2 Zeilen in die doppelt hohen Zellen. Das war eigentlich der Sinn des Ganzen.
z.B drawtext verwenden (DT_wordbreak), wenn es ein ganzer Satz ist. wenn es immer 2 Zeilen sein müssen geht auch das manuelle ausgeben per textout (jede Zeile einzeln).

Zitat:
2. Du legst die Spaltenhöhe bereits im FormCreate fest. Vielleicht flackert es auch deshalb nicht. Wo soll ich das am besten hinmachen, wenn die Zeilenhöhe erst zur Laufzeit feststeht ?
das ist doch völlig egal, wo du das tust. Es ist aber sicherlich performanter, wenn du die Zeilenhöhe nur änderst, wenn das notwendig ist (Spalte wurde verkleinert, oder ein anderer Text wurde eingeben.)

Zitat:
3. Du benutzt ja selber das OnDrawCell und nichts flackert, was jetzt ? bzw. wo geht das besser ?
weil Christian den Text nicht innerhalb der Ondrawcell setzt, dann wird der text wieder gezeichnet, dort änderst du wieder den text und es muß wieder neugzeichnet werden und das geht bis in alle ewigkeit so weiter. hat christian auch schon geschrieben:
Zitat von christian Seehase:
Ausserdem solltest Du nicht im OnDrawCell einer Zelle einen Wert zuweisen, dann wird wieder neu gezeichnet.
Das flackert dann "so schön".
Zitat:
Zitat:
StringGrid1.RowCount:=StringGrid1.RowCount+1;

Das ist eine Endlosschleife.
Wieso das ?
weil du jedesmal, wenn ondrawcell aufgerufen wird, die eine Zeile hinzugefügt wird. versteh sowieso nicht, was du hier vorhast. 3x im grid gescrollt und der Nutzer hat ein haufen leere Zeilen im grid .

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: doppelte Zeilenhöhe im Stringgrid

  Alt 25. Nov 2004, 21:28
Moin Hansa,

Zitat von Hansa:
Geht es auch, die Zeilenhöhe in Abhängigkeit von dem eingegeben Wert in Spalte 1 zu verändern ?
na sicher geht das.

Angenommen Du willst drei verschiedene Zeilenhöhen in Abhängigkeit des Wertes der ersten Spalte (mögliche Werte 1, 2 oder 3):

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

const // Array der Zeilenhöhen
  _aiRowHeight : array [0..2] of integer = (10,20,30);

begin
  // Je nachdem, was in Spalte 1 (Index = 0) steht, wird die Zeile jetzt 10, 20 oder 30 Pixel hoch
  (Sender as TStringGrid).RowHeights[ARow] := _aiRowHeigth(StrToIntDef(Sender as TStringGrid).Cells[0,ARow],0) mod 3);
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: doppelte Zeilenhöhe im Stringgrid

  Alt 25. Nov 2004, 22:47
Oh je, es wird immer komplizierter. Aber wenn wir schon dabei sind mit dem Zeichnen. Wie sieht das ganze im Zusammenhang mit einem Icon aus ?

Also in einer Zeile ein Icon einbauen. Ich weiß, daß das geht, aber auch in diesem Zsammenhang ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:59 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