![]() |
doppelte Zeilenhöhe im Stringgrid
Hi,
wie kann ich gemischt einfach- und doppelthohe Zeilen in einem Stringgrid realisieren ? Geht das überhaupt ? Ich habe mal folgendes probiert :
Delphi-Quellcode:
Das wirkt sich allerdings auf das gesamte Grid aus. Es werden also alle Zeilen neu gezeichnet, abwechselnd einfach und doppeltt hoch. 8)
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; |
Re: doppelte Zeilenhöhe im Stringgrid
Moin Hansa,
wieso, geht doch:
Delphi-Quellcode:
Du musst halt statt StringGrid1.Row ARow verwenden, da Du sonst immer den gleichen Wert abfragst, und nicht den der gerade gezeichneten Zeile.
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; Ausserdem solltest Du nicht im OnDrawCell einer Zelle einen Wert zuweisen, dann wird wieder neu gezeichnet. Das flackert dann "so schön". ;-) Wozu eigentlich
Delphi-Quellcode:
Das ist eine Endlosschleife.
StringGrid1.RowCount:=StringGrid1.RowCount+1;
|
Re: doppelte Zeilenhöhe im Stringgrid
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:
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:
Habe ich da was übersehen ?
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; 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 ? |
Re: doppelte Zeilenhöhe im Stringgrid
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Mfg Frank |
Re: doppelte Zeilenhöhe im Stringgrid
Moin Hansa,
Zitat:
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; |
Re: doppelte Zeilenhöhe im Stringgrid
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 ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz