DBGRID Titel - Hoehe

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bernie110
Beiträge: 78
Registriert: Mo 10. Feb 2020, 17:43

DBGRID Titel - Hoehe

Beitrag von Bernie110 »

Hallo Zusammen.

kann es sein dass man die Titel Höhe eines DBGrids nicht einstellen kann ?
Verändert man die Rowhight wird automatisch die Höhe der Titelleiste mit angepasst.
Ich brauch aber eine Rowhöhe von 80 und eine Titel -Höhe von 20
Danke für eure Hilfe
Lg Bernie

TraumTaenzerDieter
Beiträge: 23
Registriert: So 14. Aug 2011, 09:11

Re: DBGRID Titel - Hoehe

Beitrag von TraumTaenzerDieter »

Hey Bernie,
die Höhe der Titelzeile kannst Du über RowHeights[0] einstellen.

Bernie110
Beiträge: 78
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGRID Titel - Hoehe

Beitrag von Bernie110 »

TraumTaenzerDieter hat geschrieben:
Di 16. Jun 2020, 16:31
Hey Bernie,
die Höhe der Titelzeile kannst Du über RowHeights[0] einstellen.
Hi, danke für deine Antwort. Ja bei einem StringGrid funktioniert das.Aber bei einem DBGrid ?
Wie soll das aussehen ?
Lg Bernie


Edit... jetzt war ich zu schnell..

So funktioniert es : TCustomDrawGrid(DBGrid1).RowHeights[0] := 22;

Danke hast mir sehr weitergeholfen !! Lg Bernie

wp_xyz
Beiträge: 3249
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGRID Titel - Hoehe

Beitrag von wp_xyz »

Hast du das ausprobiert? Bei mir läuft es zwar durch den Compiler, aber die Zeilenhöhe ändert sich nicht (Win 10, Laz trunk)

Bernie110
Beiträge: 78
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGRID Titel - Hoehe

Beitrag von Bernie110 »

wp_xyz hat geschrieben:
Di 16. Jun 2020, 17:03
Hast du das ausprobiert? Bei mir läuft es zwar durch den Compiler, aber die Zeilenhöhe ändert sich nicht (Win 10, Laz trunk)
Ja funktioniert bei mir einwandfrei. (Win 10, Lazerus Version 2.0.8 for Windows 64 bit )

Code: Alles auswählen

procedure TFrm_AUFTRAEGE_ERFASSEN.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    TCustomDrawGrid(DBGrid1).RowHeights[0] := 22;
    DBGrid1.DefaultRowHeight := 75;
    with (Sender as TDBGrid) do
                 If Column.Index = 0 then //SNDG_ID
                 begin
                  with dbgrid1.canvas do  

wp_xyz
Beiträge: 3249
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGRID Titel - Hoehe

Beitrag von wp_xyz »

In OnDrawColumnCell änderst du die Zeilenhöhe? Es wundert mich, dass dir das nicht um die Ohren fliegt, denn eine Änderung der Zeilenhöhe bewirkt ein Neuzeichnen des Grid, was wiederum OnDrawColumnCell aufruft, was wiederum ein Neuzeichnen des Grid bewirkt, was wiederum ...

In einem "vernünftigen" Event wie FormCreate oder FormShow ist jedenfalls das Setzen der RowHeight mit Hilfe des Type-Cast wirkungslos. Ich habe das nun auch mit Laz 2.0.8 (64 bit), Laz trunk (32 bit, 64 bit) und Laz 1.8.4 (32 bit) geprüft.

Bernie110
Beiträge: 78
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGRID Titel - Hoehe

Beitrag von Bernie110 »

wp_xyz.. interessant. Ok anderen Vorschlag ?
Lg Bernie

wp_xyz
Beiträge: 3249
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGRID Titel - Hoehe

Beitrag von wp_xyz »

Bernie110 hat geschrieben:
Di 16. Jun 2020, 23:28
Ok anderen Vorschlag ?
Den ganzen Dataset (sofern nicht zu groß) in ein StringGrid einlesen anstatt ein DBGrid zu verwenden?

Bernie110
Beiträge: 78
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGRID Titel - Hoehe

Beitrag von Bernie110 »

@wp_xyz

Ich hab es jetzt so gemacht.

Code: Alles auswählen

uses
  Classes, SysUtils, db, sqldb, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Buttons, EditBtn, LCLType, DBGrids, Grids, ColorBox, ValEdit,
  ComCtrls, FileCtrl, ActnList, ButtonPanel;

type
 TMyCustomGrid = Class(TCustomDrawGrid);
  { TFrm_AUFTRAEGE_ERFASSEN } 

Code: Alles auswählen

procedure TFrm_AUFTRAEGE_ERFASSEN.FormShow(Sender: TObject);
var
XBackColor : String;
XFontColor : String;
begin

   TCustomDrawGrid(DBGrid1).RowHeights[0] := 22;
   DBGrid1.DefaultRowHeight := 75;  
Jetzt funktioniert es. Was wäre daran falsch ?
wp_xyz hat geschrieben:
Mi 17. Jun 2020, 01:05
Den ganzen Dataset (sofern nicht zu groß) in ein StringGrid einlesen anstatt ein DBGrid zu verwenden?


Was verstehst du unter zu gross ?

Lg Bernie

wp_xyz
Beiträge: 3249
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGRID Titel - Hoehe

Beitrag von wp_xyz »

Jetzt habe ich's nochmal probiert, und plötzlich geht's. Seltsam...

Mit "zu groß" meinte ich, "nicht so groß, dass das man das Umkopieren in ein StringGrid bemerkt".

Bernie110
Beiträge: 78
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGRID Titel - Hoehe

Beitrag von Bernie110 »

wp_xyz hat geschrieben:
Mi 17. Jun 2020, 19:07
Jetzt habe ich's nochmal probiert, und plötzlich geht's. Seltsam...

Mit "zu groß" meinte ich, "nicht so groß, dass das man das Umkopieren in ein StringGrid bemerkt".
Aha und was hast du jetzt bei dir anders gemacht, dass es funktioniert ?
Umkopieren ? ... ja ist zu gross ;-)
Lg Bernie

wp_xyz
Beiträge: 3249
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGRID Titel - Hoehe

Beitrag von wp_xyz »

Bernie110 hat geschrieben:
Mi 17. Jun 2020, 20:10
Aha und was hast du jetzt bei dir anders gemacht, dass es funktioniert ?
Von Grund auf ein Projekt dafür geschrieben, vorher hatte ich die zwei Zeilen aus deinem Post nur in ein vorhandenes Projekt eingefügt. Und wenn ich mir das jetzt mit klarem Kopf nochmals anschaue, dann sehe ich, dass du die Reihenfolge anders hast als ich - und wenn ich es genauso mache, habe ich wieder den Zustand von gestern, wo alle Zeilen gleich hoch sind. Probier's mit dem beigefügten Projekt aus (du kannst in "FormShow()" durch Änderung der Auskommentierung zwischen beiden Varianten umschalten).

Offenbar kommt es auf die Reihenfolge an, denn wenn man DefaultRowHeight setzt, werden die individuellen Zeilenhöhen gelöscht. Das sieht man im Quellcode beim Setter von DefaultRowHeight:

Code: Alles auswählen

procedure TCustomGrid.SetDefRowHeight(AValue: Integer);
...
begin
...
    for i:=0 to RowCount-1 do
      FRows[i] := -1;
...   
end; 
Die IntegerListe FRows speichert hier die individuellen Zeilenhöhen, und diese werden auf -1 gesetzt, wodurch ein vorher gesetztes Grid.RowHeights[0] := 22 verloren geht.
Dateianhänge
dbgrid_header_rowheight.zip
(3.08 KiB) 4-mal heruntergeladen

Antworten