Page 1 of 2 1 2 LastLast
Results 1 to 15 of 16

Thread: DBGRID font zize.

  1. #1
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Question DBGRID font zize.

    CT.7.10 + Windows 10.

    Hoe kan ik de Size v.d. Font vergroten, enkel v.d. "DBGrid", als de Form = Maximized en de Size terug op normaal zetten als de Form op Normal wordt gezet.

  2. #2
    Hallo,

    Misschien kan je onderstaand idee gebruiken.

    Met een vriendelijke groet, Frans


    Code:
    unit Unit1;
    
    {$mode objfpc}{$H+}
    
    interface
    
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
    
    type
    
      { TForm1 }
    
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure FormWindowStateChange(Sender: TObject);
      private
    
      public
    
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    var
     W,H  : Integer;
     Size : Integer;
    
    {$R *.lfm}
    
    PROCEDURE TForm1.FormResize(Sender: TObject);
    BEGIN
      IF (Width > W) or (Height > H) THEN
        Inc(Size)
      ELSE
        Dec(Size);
      IF Size < 10 THEN Size := 10;   // Begrenzing letter hoogte mininmaal
      IF Size > 32 THEN Size := 32;   // Begrenzing letter hoogte maxinmaal
      Font.Size := Size;
      W := Width;
      H := Height;
      Invalidate;
    END;
    
    PROCEDURE TForm1.FormWindowStateChange(Sender: TObject);
    BEGIN
      IF WindowState = wsMaximized THEN
        Size := 99
      ELSE Size := 0;
      FormResize(nil);
    END;
    
    PROCEDURE TForm1.FormCreate(Sender: TObject);
    BEGIN
      Size := 10;
      W := Width;
      H := Height;
      Font.Size := 10;
    END;
    end.

  3. #3
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Question

    Dank voor de reply.
    Blijkbaar doe ik iets fout !!!
    Heb wel de variable aangepast met een 'F' vooraan.
    FSize
    FW
    FH
    De fontsize wordt niet aangepast bij "wsMaximized".
    De compiler geeft geen fouten en de applicatie werkt zoals voorheen.
    Hier mijn code:

    Code:
    procedure TFMAIN.FormCreate(Sender: TObject);
    begin
      // *** NL-DELPHI
      FSize := 10;
      FW := Width;
      FH := Height;
      Font.Size := 10;
      // *** NL-DELPHI
      // De Aligment voor "Title.Captions" in de DBGrid1.
      DBGrid1.Columns[0].Title.Alignment:= taCenter;
      DBGrid1.Columns[0].Title.Font.Color:= clRED;
      DBGrid1.Columns[0].Title.Font.Style:= [fsBold];
      DBGrid1.Columns[2].Title.Alignment:= taCenter;
      DBGrid1.Columns[2].Title.Font.Color:= clRED;
      DBGrid1.Columns[2].Title.Font.Style:= [fsBold];
      // "defaultFormatSettings" moet voor "ShortDateFormat".
      defaultFormatSettings.ShortDateFormat:='DD/MM/YYYY';
      defaultFormatSettings.DateSeparator:= '/';
      // PanelPlaatjeGROOT op de juiste plaats zetten in de juiste grootte.
      FMAIN.ClientWidth := DBGrid1.Left + DBGrid1.Width;
      FDATA.SQLQuery1.UpdateMode := upWhereKeyOnly;
      FDATA.SQLQuery1.active := True;
      // DBGrid1.SetFocus;  // <-- this can't be done in FormCreate
      Self.ActiveControl := DBGrid1; // <-- this can be done in FormCreate
      // de 2 comboboxen opvullen met de gegevens uit de 2 txt bestanden.
      //CBoxPCODE.Items.LoadFromFile('DBPCODE.txt');
      // de 2 velden v.d. dbgrid opvullen met de gegevens uit de 2 txt bestanden
      // in de vorm van dropdown.
      DBGrid1.Columns[2].PickList.LoadFromFile('DBPCODE.txt');
      DBGrid1.DragMode := dmAutomatic;
      //
      RecordsFound;  // speciale proc. Aantal records in DB:
      // Initialize width for each column.
      DBGrid1.Columns.Items[0].Width := 330;  // NAAM
      DBGrid1.Columns.Items[1].Width := 330;  // ADRES
      DBGrid1.Columns.Items[2].Width := 330;  // PCODE
      DBGrid1.Columns.Items[3].Width := 100;  // HOMETEL
      DBGrid1.Columns.Items[4].Width := 110;  // GSMTEL
      DBGrid1.Columns.Items[5].Width := 200;  // EMAIL
      DBGrid1.Columns.Items[6].Width := 100;  // GDATUM
      DBGrid1.Columns.Items[7].Width := 330;  // INFO
      Application.ProcessMessages;
    end;   
    
    procedure TFMAIN.FormResize(Sender: TObject);
    begin
      //showmessage('Resize');
      // *** NL-DELPHI
      IF (Width > FW) or (Height > FH) THEN
        Inc(FSize)
      ELSE
        Dec(FSize);
      IF FSize < 10 THEN FSize := 10;   // Begrenzing letter hoogte mininmaal
      IF FSize > 32 THEN FSize := 32;   // Begrenzing letter hoogte maxinmaal
      Font.Size := FSize;
      FW := Width;
      FH := Height;
      Invalidate;
      // *** NL-DELPHI
    end;     
    
    procedure TFMAIN.FormWindowStateChange(Sender: TObject);
    begin
      if (Self.WindowState = wsMaximized) then
      begin
        //showmessage('onwindowstatechange');
        DBGrid1.Width:= PanelDBGrid.Width -1;
        DBGrid1.Height:= PanelDBGrid.Height;
        PanelNavigator.Width:= PanelZoek.ClientWidth -10;
        Application.processmessages;
      end;
      // *** NL-DELPHI
      IF WindowState = wsMaximized THEN
        FSize := 99
      ELSE FSize := 0;
      FormResize(nil);
      // *** NL-DELPHI
    end;

  4. #4
    Dit werkt bij mij gewoon (met een TStringGrid):
    Delphi Code:
    1. procedure TForm1.FormWindowStateChange(Sender: TObject);
    2. begin
    3.   writeln('FormWindowStateChange: WindowState=',WindowState);
    4.   case WindowState of
    5.     wsMaximized: StringGrid1.Font.Size := 18;
    6.     wsNormal: StringGrid1.Font.Size := 8;
    7.     wsMinimized: {StringGrid1.Font.Size := 1}; //do nothing
    8.   end;
    9. end;

    Bart

  5. #5
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    Sorry Bart, maar jouw laatste code helpt niet.
    Heb de naam 'stringgrid' natuurlijk aangepast naar 'dbgrid'.
    Bedankt voor de moeite.

    Waarschijnlijk zitten de professionele 'DBGrid' programmeurs tijdens de kerst op een zonnig eiland!

  6. #6
    Quote Originally Posted by seghele View Post
    Sorry Bart, maar jouw laatste code helpt niet.
    Definieer "helpt niet".
    Wordt de code überhaupt uitgevoerd als je maximized?
    Heb je in OI het event wel gekoppeld?

    Bart

  7. #7
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    De diverse showmessages komen te voorschijn.
    Sorry, maar 'debuggen' is niets voor mij !
    In Attachments zit mijn hoofdunit.

    umain.pas

    Code:
    var
       FMAIN: TFMAIN;
       FW,FH  : Integer;
       FSize : Integer;
    implementation 
    ....        
    procedure TFMAIN.FormResize(Sender: TObject);
    begin
      //showmessage('Resize');
      // *** NL-DELPHI
      showmessage('1 - FormResize');
      IF (Width > FW) or (Height > FH) THEN
        Inc(FSize)
      ELSE
        Dec(FSize);
      IF FSize < 10 THEN FSize := 10;   // Begrenzing letter hoogte mininmaal
      IF FSize > 32 THEN FSize := 32;   // Begrenzing letter hoogte maxinmaal
      Font.Size := FSize;
      FW := Width;
      FH := Height;
      Invalidate;
      // *** NL-DELPHI
    end;
    //*********************************************************************
    procedure TFMAIN.FormWindowStateChange(Sender: TObject);
    begin
      if (Self.WindowState = wsMaximized) then
      begin
        showmessage('1 - Fonwindowstatechange');
        DBGrid1.Width:= PanelDBGrid.Width -1;
        DBGrid1.Height:= PanelDBGrid.Height;
        PanelNavigator.Width:= PanelZoek.ClientWidth -10;
        Application.processmessages;
      end;
      // *** NL-DELPHI
      IF WindowState = wsMaximized then
      begin
        showmessage('2 - FormWindowStateChange');
        FSize := 99;
      end
      else
      begin
        showmessage('3- FormWindowStateChange');
        FSize := 0;
      end;
      FormResize(nil);
      // *** NL-DELPHI
    end;

  8. #8
    Je zet wel FSize, maar nergens (in FormResize) de Font.Size van het Grid.
    Ik zou dit overigens niet in OnResize afhandelen.
    Dit event wordt namelijk meerdere keren afgevuurd als je het form van grootte veranderd.
    Stel je form is bijna maximaal, nu verklein je het form en binnen enkele stapjes is je font size je gedefinieerde minimum grootte.
    Stel je form is erg klein (50x*50 pixels bijvoorbeel), nu vergroot je het form en binnen enkele stapjes is je font size je gedefinieerde maximum grootte.
    Dat lijkt me niet wat je wilt.

    Ik kan me 2 dingen voorstellen die je wilt bereiken:
    Ofwel de font.size groeit proportioneel met de form grootte,
    of je hebt een font.size voor wsMaximized en een andere font.size voor niet wsMaximized.

    Hier is een voorbeeld van de eerste optie:
    Delphi Code:
    1. procedure TForm1.FormResize(Sender: TObject);
    2. begin
    3.   if IsConsole then writeln('FormResize');
    4.   Case Width of
    5.     0..400: StringGrid1.Font.Size := 8;
    6.     401..800: StringGrid1.Font.Size := 10;
    7.     801..1200: StringGrid1.Font.Size := 12;
    8.     Otherwise StringGrid1.Font.Size := 14;
    9.   end;
    10. end;

    Nog een opmerking: in OnCreate zet je de font size van je form.
    Dit heeft alleen effect op het grid als ParentFont van het grid op True staat (dat is de default waarde overigens).

    Verder zie ik dat je ook panels en grids van grootte veranderd bij het re-sizen.
    Dat is een beetje "old school", je kunt beter Anchors gebruiken hiervoor, die stel je in in de OI en (als je het goed doet) groeien de controls mee met het form.


    Bart
    Last edited by Bart B; 26-Dec-20 at 16:46.

  9. #9
    Kleine modificatie (oogt net iets netter):
    Delphi Code:
    1. procedure TForm1.FormResize(Sender: TObject);
    2. var
    3.   Area: Integer;
    4. begin
    5.  if IsConsole then writeln('FormResize');
    6.   Area := Width*Height;
    7.   Case Area of
    8.     0..640*480: StringGrid1.Font.Size := 8;
    9.     640*480+1..800*600: StringGrid1.Font.Size := 10;
    10.     800*600+1..1024*768: StringGrid1.Font.Size := 12;
    11.     Otherwise StringGrid1.Font.Size := 14;
    12.   end;
    13. end;

    Bart

  10. #10
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    Bart,

    Jouw code maakt geen verschil in de font.size.
    Code:
    procedure TFMAIN.FormResize(Sender: TObject);
    var
      Area: Integer;
    begin
      //showmessage('Resize');
      if IsConsole then writeln('FormResize');
        Area := Width*Height;
        Case Area of
          0..640*480: DBGrid1.Font.Size := 8;
          640*480+1..800*600: DBGrid1.Font.Size := 10;
          800*600+1..1024*768: DBGrid1.Font.Size := 12;
          Otherwise DBGrid1.Font.Size := 14;
        end;
    Wat ik zoek is een DBGrid font.size voor wsMaximized en een andere font.size voor 'niet' wsMaximized.
    De resolutie v.h. scherm zou geen rol mogen spelen.
    Heb namelijk een groot scherm 27" wat een Maximized kan gebruiken voor deze applicatie, maar dan wel met aangepaste font.size van 18.

    Leo

  11. #11
    Dan zou mijn code uit post #4 moeten werken.
    Bij mij werkt het (Lazarus trunk, fpc 3.2.0).
    Geen idee waarom het bij jou niet werkt.

    Nogmaals: in mijn voorbeeld (#4) heb je geen OnResize nodig, en bovendien jouw OnResize doet niet wat jij denkt dat het doet.

    Zie bijgevoegd test project.

    Bart
    Attached Files Attached Files

  12. #12
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    Bedankt Bart voor de 'zip'.
    Inderdaad, jouw voorbeeld programma werkt, maar het gaat nog altijd over een STRINGGRID en niet een DBGrid.
    Blijkbaar zit er een groot verschil tussen beiden qua aanpassing van de font.

    Misschien kan jij het met een DBGrid uittesten ???
    Indien je weinig tijd hebt, laat deze zaak dan maar vallen.
    Jouw steun was al prima.

  13. #13
    geen idee hoe CT werkt maar de makkelijkste test om te kijken of eea werkt is gewoon een button plaatsen op het scherm en in de onclick de font van de dbgrid aanpassen. Als dat werkt dat is weet je zeker dat het kan.

    Als je eigen code dan niet werkt dat weet je zeker dat de plek waar je eea hebt geprogrammeerd niet de correcte plek is en dat bijv het resize van de dbgrid de gekozen font overrules.

    Overigens is het zo dat als je alleen de font van de dbgrid (of welke willekeurig control) wilt aanpassen cq aanpast dat dan zoals eerder gemeld de "parentfont" van true naar false gaat! Na het veranderen van dbgrid font zal dbgrid font dus niet meer de form font volgen!

    Dit kan je met twee buttons op het scherm snel testen
    button1
    Code:
       dbgrid1.Font.Size:=Font.Size+5;
    button2
    Code:
       font.size := font.size+5;
    klik een paar maal op button2 en het font van dbgrid volgt het form font (als parentfont aan staat) zodra je echter button1 1 maal geklikt hebt zal dat niet meer gebeuren

  14. #14
    Quote Originally Posted by seghele View Post
    Bedankt Bart voor de 'zip'.
    Inderdaad, jouw voorbeeld programma werkt, maar het gaat nog altijd over een STRINGGRID en niet een DBGrid.
    Beiden hebben een font property, als het onmogelijk is om die te zetten, dan is dat een bug.
    Test dat zoals Miep aangeeft, werkt het niet dan is er iets mis.

    Een DbGrid ontleent zijn inhoud (de tekst dus) aan zijn datasource.
    Dus heb je een database nodig om het grid te vullen, die heb ik zo even niet voorhanden, dus mijn DbGrid is altijd leeg (en het testen van het font dus vrij zinloos).

    Bart

  15. #15
    OK, net even getest met een CsvDataset.
    Het font veranderen van een DbGrid gaat prima, niet anders dan van een TStringGrid.

    Conclusie: of jij doet iets fout, of CT doet iets fout.

    Bart

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •