Page 1 of 3 1 2 3 LastLast
Results 1 to 15 of 35

Thread: Stringgrid – Scrolling

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

    Question Stringgrid – Scrolling

    Windows 8.1 + CodeTyphon(Lazarus).

    Heb een verticale scroll balk die perfect werkt met de muis.
    Wat ik graag wil is dat er na het ingevuld hebben van een row er een lege zichtbaar wordt.
    Nu worden de rows ingevuld tot op het einde van de zichtbare stringgrid in de form, dit zijn 12 rows(6 spelgiften). De volgende rows die ingevuld worden zijn niet zichtbaar, tenzij er met de scrolbar gewerkt wordt.
    De nog lege row in de stringgrid zou dus steeds zichtbaar moeten zijn tot de laatste row ingevuld is.
    Heb geen idee of dit mogelijk is!

    Code:
    unit umain;
    
    {$mode objfpc}{$H+}
    
    interface
    
    uses
      Windows,
      LCLIntf, LCLProc, LCLType,
      Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls, StdCtrls,
      Graphics, Dialogs, Menus, Grids, Buttons, IniFiles,
      Printers, OSPrinters;
    
    type
    
      { TFmain }
      TFmain = class(TForm)
        btnBEWAARPUNTEN: TButton;
        btnSPELGEDAAN: TButton;
        ChBoxTROEL: TCheckBox;
        ChBoxRONDEPAS: TCheckBox;
        ChBoxABONDANCE: TCheckBox;
        ChBoxMIZERIE: TCheckBox;
        EDITSpeler1: TEdit;
        EDITSpeler2: TEdit;
        EDITSpeler3: TEdit;
        EDITSpeler4: TEdit;
        Label1: TLabel;
        LblSPELER1: TLabel;
        LblSPELER2: TLabel;
        LblSPELER3: TLabel;
        LblSPELER4: TLabel;
        MainMenu: TMainMenu;
        MenuItem1: TMenuItem;
        MenuItemLIJN2: TMenuItem;
        MenuItemEXPORTscore: TMenuItem;
        MenuItemLIJN3: TMenuItem;
        MenuItemINFO: TMenuItem;
        MenuItemEXPORTtotaal: TMenuItem;
        MenuItemEXIT: TMenuItem;
        PanelSpeler1: TPanel;
        PanelMAIN: TPanel;
        Panel2: TPanel;
        PanelDubbel: TPanel;
        PanelSpeler2: TPanel;
        PanelSpeler3: TPanel;
        PanelSpeler4: TPanel;
        PanelSPELERS: TPanel;
        SpeedButtonPrintGrid: TSpeedButton;
        StringGrid1: TStringGrid;
        procedure btnSPELGEDAANClick(Sender: TObject);
        procedure btnBEWAARPUNTENClick(Sender: TObject);
        procedure ChBoxABONDANCEClick(Sender: TObject);
        procedure ChBoxMIZERIEClick(Sender: TObject);
        procedure ChBoxRONDEPASClick(Sender: TObject);
        procedure ChBoxTROELClick(Sender: TObject);
        procedure EDITSpeler4Exit(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
        procedure MenuItemEXPORTscoreClick(Sender: TObject);
        procedure MenuItemEXPORTtotaalClick(Sender: TObject);
        procedure MenuItemEXITClick(Sender: TObject);
        procedure MenuItemINFOClick(Sender: TObject);
        procedure SpeedButtonPrintGridClick(Sender: TObject);
        procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
            aRect: TRect; aState: TGridDrawState);
        procedure StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
            aState: TGridDrawState);
    
      private
        { private declarations }
        procedure settings(style1 : TFontstyles; fontcl1 : tcolor;
                           style2 : TFontstyles; fontcl2 : tcolor;
                           style3 : TFontstyles; fontcl3 : tcolor;
                           style4 : TFontstyles; fontcl4, panelkleur : tcolor);
    
      public
        { public declarations }
        varGift, varMaxGift: Integer;
        varSpeler1Totaal, varSpeler2Totaal, varSpeler3Totaal, varSpeler4Totaal: Integer;
        varSpeler1Naam, varSpeler2Naam, varSpeler3Naam, varSpeler4Naam: String;
      end;
    
    var
      Fmain: TFmain;
    
    implementation
    
    {$R *.lfm}
    
    procedure TFmain.FormCreate(Sender: TObject);
    var
       varINI: TINIFile;
    begin
      // Afmetingen instellen
      StringGrid1.ColWidths[0]:= 15;
      StringGrid1.GridLineWidth:= 3;
      // Beginscore van de spelers
      varSpeler1Totaal:= 0;
      varSpeler2Totaal:= 0;
      varSpeler3Totaal:= 0;
      varSpeler4Totaal:= 0;
      // begin INI file ***
      varINI := TINIFile.Create('WiezenSpelers.ini');
      try
         varSpeler1Naam:= varINI.ReadString('INISpelers','Speler1','');
         varSpeler2Naam:= varINI.ReadString('INISpelers','Speler2','');
         varSpeler3Naam:= varINI.ReadString('INISpelers','Speler3','');
         varSpeler4Naam:= varINI.ReadString('INISpelers','Speler4','');
         varMaxGift:=     varINI.ReadInteger('INIGiften','Totgiften',16);
         // de waarde van 16 wordt overschreven door de waarde uit het "ini" bestand
      finally
         varINI.Free;
      end;
      // Bijhouden van het aantal gespeelde giften + Maximum aantal giften.
      varGift:= 1;
      //varMaxGift:= 20; // Dit wordt opgevangen via het "ini" bestandje.
      Label1.Caption:= 'Gift ' + IntToStr(varGift) + ' van ' + IntToStr(varMaxGift) + '.';
      StringGrid1.RowCount:= 1 + (varMaxGift * 2);
      // spelersnamen invullen in grid
      StringGrid1.Cells[1, 0]:= varSpeler1Naam;
      StringGrid1.Cells[2, 0]:= varSpeler2Naam;
      StringGrid1.Cells[3, 0]:= varSpeler3Naam;
      StringGrid1.Cells[4, 0]:= varSpeler4Naam;
      //spelersnamen invullen in panel
      LblSPELER1.Caption:= varSpeler1Naam;
      LblSPELER2.Caption:= varSpeler2Naam;
      LblSPELER3.Caption:= varSpeler3Naam;
      LblSPELER4.Caption:= varSpeler4Naam;
    end;
    
    procedure TFmain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      case key of
         VK_ESCAPE : begin
                         //
                     end;
         VK_RETURN : key := vk_TAB;
         VK_F1     : MenuItemINFO.Click;
         VK_F4     : btnSpelgedaan.Click;
         VK_F8     : MenuItemEXPORTscore.Click;
         VK_F9     : MenuItemEXPORTtotaal.Click;
         VK_F12    : MenuItemEXIT.Click;
      end; // case
    end;
    
    procedure SaveFirstAndLastFromStringGrid(StringGrid: TStringGrid; Filename: string);
    var
      varStream: TMemoryStream;
      varStringList: TStringList;
      varCol, varRow: integer;
      varStr: string;
    begin
      varStream := TMemoryStream.Create;
      varStringList := TStringList.Create;
      try
        varStringList.Delimiter := ',';
        varStringList.StrictDelimiter := False;
        varStringList.Clear; // is reeds leeg dus eigenlijk niet nodig
        for varCol := 0 to StringGrid.ColCount - 1 do
          varStringList.Add(Trim(StringGrid.Cells[varCol, 0]));
          varStr := varStringList.DelimitedText + LineEnding;
          varStream.Write(varStr[1], Length(varStr));
          for varRow := StringGrid.RowCount - 1 downto 1 do
          begin
            varStr := '';
            varStringList.Clear;
            for varCol := 0 to StringGrid.ColCount - 1 do
            begin
              varStringList.Add(Trim(StringGrid.Cells[varCol, varRow]));
              varStr := varStr + Trim(StringGrid.Cells[varCol, varRow]); // tijdelijke dummy voor controle leeg
            end;
            if varStr <> '' then
            begin
              varStr := varStringList.DelimitedText + LineEnding; // delimited
              varStream.Write(varStr[1], Length(varStr));
              Break;
            end;
          end;
          varStream.SaveToFile(Filename);
      finally
      varStream.Free;
      varStringList.Free;
      end;
    end;
    
    procedure TFmain.MenuItemEXPORTscoreClick(Sender: TObject);
    begin
      If QuestionDlg ('KEUZE !','Gegevens opslaan?'+#13+
         '',mtConfirmation, [mrYes,'OK', mrNo, 'Annuleren'],'') = mrYes then
      begin
        try
          SaveFirstAndLastFromStringGrid(StringGrid1, 'Wiezen ' +
              formatdatetime('yyyy'+'mm'+'dd', Now) + '_' +
              formatdatetime('nn-ss', Now) + '.csv');
          QuestionDlg('INFO', 'Het bestand "Wiezen.csv" ' +#13+
              'werd aangemaakt.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
        except on e: Exception do
          begin
            QuestionDlg('Fout', 'Fout gevonden'+#13+
             '' +#13+'Kon niet bewaren!'+
             '' +#13+ 'ERROR: '+ E.Message, mtError, [mrOk,'OK  <--- '],'');
          end;
        end;
      end;
    end;
    
    procedure TFmain.MenuItemEXPORTtotaalClick(Sender: TObject);
    begin
      If QuestionDlg ('KEUZE !','Gegevens opslaan?'+#13+
         '',mtConfirmation, [mrYes,'OK', mrNo, 'Annuleren'],'') = mrYes then
      begin
       Try
        Stringgrid1.SaveToCSVFile('Wiezen ' +
              formatdatetime('yyyy'+'mm'+'dd', Now) + '_' +
              formatdatetime('nn-ss', Now) + '.csv');
        QuestionDlg('INFO', 'Het bestand "Wiezen.csv" ' +#13+
            'werd aangemaakt.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
       except on e: Exception do
        begin
          QuestionDlg('Fout', 'Fout gevonden'+#13+
           '' +#13+'Kon niet bewaren!'+
           '' +#13+ 'ERROR: '+ E.Message, mtError, [mrOk,'OK  <--- '],'');
        end;
       end;
      end;
    end;
    
    procedure TFmain.MenuItemEXITClick(Sender: TObject);
    begin
      If QuestionDlg ('OPGEPAST !','Programma sluiten?'+#13+
             '',mtConfirmation,[mrYes,'JA', mrNo, 'NEEN'],'') = mrYes then
      begin
        Application.Terminate;
      end;
    end;
    
    procedure TFmain.MenuItemINFOClick(Sender: TObject);
    begin
       QuestionDlg('INFO', 'Het bestand  "WiezenSpelers.ini"  kan aangepast worden.'+#13+
           'In "edit" mode enkel de naam van de speler veranderen.'+#13+
           'Een of meerdere namen zoals Leo,Mariette,Felix,Rita aanpassen en daarna "Bewaren"(Save)'+#13+
           'onder exact dezelfde naam, ttz. "WiezenSpelers.ini" en in dezelfde map.'+#13+
           'Het aantal spelletjes (giften) kan ook aangepast worden. Vervang het geal 20 in een ander.'+#13+#13+
           '',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
    end;
    
    procedure TFmain.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    begin
      //Ik maak gebruik van de Stringgrid -> eigenschappen = AlternateColor
    end;
    
    procedure TFmain.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
      aState: TGridDrawState);
    var
      varMyTextStyle: TTextStyle;
    begin
      If (aCol > 0)then // tekst allign op taCenter zetten.
      begin
        varMyTextStyle := StringGrid1.Canvas.TextStyle;
        varMyTextStyle.Alignment := taCenter; // taRightJustif
        StringGrid1.Canvas.TextStyle := varMyTextStyle;
      end;
      If ((aRow = 0) and (aCol>=StringGrid1.FixedCols)) then
      begin
        StringGrid1.Canvas.Font.Color:= clNavy;
        StringGrid1.Canvas.Font.Style:= [fsBold];
      end;
    end;
    
    procedure TFmain.btnSPELGEDAANClick(Sender: TObject);
    begin
      btnSPELGEDAAN.Enabled:= false;
      btnBEWAARPUNTEN.Enabled:= true;
      EDITSpeler1.Enabled:= true;
      EDITSpeler2.Enabled:= true;
      EDITSpeler3.Enabled:= true;
      EDITSpeler4.Enabled:= true;
      EDITSpeler1.SetFocus;
      EDITSpeler1.SelectAll;
    end;
    
    procedure TFmain.EDITSpeler4Exit(Sender: TObject);
    begin
      btnBEWAARPUNTEN.SetFocus;
      btnBEWAARPUNTEN.Click;
    end;
    
    //***Checkbox-instellingen***
    procedure TFmain.settings(style1 : TFontstyles; fontcl1 : tcolor;
              style2 : TFontstyles; fontcl2 : tcolor;
              style3 : TFontstyles; fontcl3 : tcolor;
              style4 : TFontstyles; fontcl4, panelkleur : tcolor);
    begin
      ChBoxABONDANCE.Font.Style:=style1;
      ChBoxABONDANCE.Font.Color:=fontcl1;
      ChBoxMIZERIE.Font.Style:=style2;
      ChBoxMIZERIE.Font.Color:=fontcl2;
      ChBoxTROEL.Font.Style:=style3;
      ChBoxTROEL.Font.Color:=fontcl3;
      ChBoxRONDEPAS.Font.Style:=style4;
      ChBoxRONDEPAS.Font.Color:=fontcl4;
      PanelDubbel.Color:= panelkleur;
    end;
    
    procedure TFmain.ChBoxABONDANCEClick(Sender: TObject);
    begin
      if ChBoxABONDANCE.Checked or ChBoxTROEL.Checked or
         ChBoxMIZERIE.Checked or ChBoxRONDEPAS.Checked then
         settings([fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,clRed)
       else
         settings([],clWhite,[],clWhite,[],clWhite,[],clWhite,clNavy);
    end;
    
    procedure TFmain.ChBoxMIZERIEClick(Sender: TObject);
    begin
      if ChBoxABONDANCE.Checked or ChBoxTROEL.Checked or
         ChBoxMIZERIE.Checked or ChBoxRONDEPAS.Checked then
         settings([fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,clRed)
       else
         settings([],clWhite,[],clWhite,[],clWhite,[],clWhite,clNavy);
    end;
    
    procedure TFmain.ChBoxRONDEPASClick(Sender: TObject);
    begin
      if ChBoxABONDANCE.Checked or ChBoxTROEL.Checked or
         ChBoxMIZERIE.Checked or ChBoxRONDEPAS.Checked then
         settings([fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,clRed)
       else
         settings([],clWhite,[],clWhite,[],clWhite,[],clWhite,clNavy);
    end;
    
    procedure TFmain.ChBoxTROELClick(Sender: TObject);
    begin
      if ChBoxABONDANCE.Checked or ChBoxTROEL.Checked or
         ChBoxMIZERIE.Checked or ChBoxRONDEPAS.Checked then
         settings([fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,[fsbold],clYellow,clRed)
       else
         settings([],clWhite,[],clWhite,[],clWhite,[],clWhite,clNavy);
    end;
    
    procedure PrintStringGrid(Grid: TStringGrid; Title: string);
    var
      varI, varJ, varP : Integer;
      varAnzSeiten, varSeite : Integer;
      varRow, varRowSize : Integer;
      varFontHeight : Integer;
      varYPos, varXPos : Integer;
      varHorzSize, varVertSize : Integer;
      varHeaderSize, varFooterSize : Integer;
      varFooter : String;
      varMMX, varMMY : Extended;
    begin
      //FontSize, Header, Footer, Row distance
      varHeaderSize := 100;
      varFooterSize := 200;
      varRowSize := 78; //36; aangepast - spatie tussen lijnen
      varFontHeight := 68; //36; //aangepast
      Printer.Title  := Title;
      Printer.BeginDoc;
      //Druck auf mm einstellen
      varMMX := GetDeviceCaps (TWinPrinter(Printer).Handle, PHYSICALWIDTH) /
        GetDeviceCaps(TWinPrinter(Printer).Handle, LOGPIXELSX) * 25.4;
      varMMY := GetDeviceCaps(TWinPrinter(Printer).Handle, PHYSICALHEIGHT) /
        GetDeviceCaps(TwinPrinter(Printer).Handle, LOGPIXELSY) * 25.4;
      varVertSize := Trunc(varMMY) * 10;
      varHorzSize := Trunc(varMMX) * 10;
      SetMapMode(TwinPrinter(Printer).Handle, MM_LOMETRIC);
      //Zeilenanzahl festlegen
      varRow := (varVertSize - varHeaderSize - varFooterSize) div varRowSize;
      varRow := varRow -1; // <--- om onderaan pagina plaats te hebben voor footer
      //Seitenanzahl ermitteln
      if Grid.RowCount mod varRow <> 0 then
        varAnzSeiten := Grid.RowCount div varRow + 1
      else
        varAnzSeiten := Grid.RowCount div varRow;
      varSeite := 1;
      //Print Grid
      for varP := 1 to varAnzSeiten do
      begin
        //Header
        Printer.Canvas.Font.Name := 'Arial';
        Printer.Canvas.Font.Style :=[fsBold];
        Printer.Canvas.Font.Height := 68; //48; //aangepast
        Printer.Canvas.TextOut((varHorzSize div 2 -
           (Printer.Canvas.TextWidth(Title) div 2)),- 20,Title);
        Printer.Canvas.Pen.Width := 5;
        Printer.Canvas.MoveTo(0, - varHeaderSize);
        Printer.Canvas.LineTo(varHorzSize, - varHeaderSize);
        //Footer
        Printer.Canvas.MoveTo(0, - varVertSize + varFooterSize);
        Printer.Canvas.LineTo(varHorzSize, - varVertSize + varFooterSize);
        Printer.Canvas.Font.Height := 56; //36; // aangepast
        varFooter := 'Pagina: ' + IntToStr(varSeite) + ' van ' + IntToStr(varAnzSeiten);
        Printer.Canvas.TextOut((varHorzSize div 2 - (Printer.Canvas.TextWidth(varFooter) div 2)),
          - varVertSize + 150,varFooter);
        //Print Row
        Printer.Canvas.Font.Height := varFontHeight;
        varYPos := varHeaderSize + 10;
        // *** volgende dient om op tweede pagina ook de hoofding (namen) te zetten ***
        varXPos := 400;//0; //aangepast volgens de ruimte links v.d. kolom en bladrand
        for varJ := 0 to Grid.ColCount - 1 do
        begin
          Printer.Canvas.TextOut(varXPos, - varYPos, Grid.Cells[varJ, 0]); // <-- dit zou dan je eerste regel printen
          varXPos := varXPos + Grid.ColWidths[varJ] * 3;
        end;
        varYPos := varYPos + varRowSize;
        // **********
        for varI := 1 to varRow do
        begin
          if Grid.RowCount >= varI + (varSeite - 1) * varRow + 1 then
          begin
            varXPos := 400; //0; //aangepast volgens de ruimte links v.d. kolom en bladrand ;
            for varJ := 0 to Grid.ColCount - 1 do
            begin
              Printer.Canvas.TextOut(varXPos, - varYPos,
              Grid.Cells[varJ, varI + (varSeite - 1) * varRow +1 -1]);
              varXPos := varXPos + Grid.ColWidths[varJ] * 3;
            end;
            varYPos := varYPos + varRowSize;
          end;
        end;
        //Seite hinzufόgen
        Inc(varSeite);
        if varSeite <= varAnzSeiten then Printer.NewPage;
      end;
      Printer.EndDoc;
    end;
    // IDE Lazarus:  Project > Project Inspector > rechts klik op Required packages en
    // dan "printer4lazarus" kiezen en toevoegen.
    // Bij CodeTyphon: add "LZ-PRINTERS".
    procedure TFmain.SpeedButtonPrintGridClick(Sender: TObject);
    begin
      If QuestionDlg ('KEUZE !','Gegevens afdrukken?'+#13+
         '',mtConfirmation, [mrYes,'OK', mrNo, 'Annuleren'],'') = mrYes then
      begin
        PrintStringGrid(StringGrid1, 'Print Stringgrid Wizen '+
              formatdatetime('dd'+'/'+'mm'+'/'+'YYYY', Now));
      end;
    end;
    
    procedure TFmain.btnBEWAARPUNTENClick(Sender: TObject);
    var
       varMessage: String;
       varRijGift, varRijTotaal: Integer;
    begin
      // controleren of alle waardes zijn ingevuld.
      if EDITSpeler1.Text = '' then
      begin
         QuestionDlg('FOUT', 'Je kan niet bewaren. ' +#13+
           'Alle waardes zijn niet ingevuld.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
         EDITSpeler1.SetFocus;
         EDITSpeler1.SelectAll;
         exit;
      end;
      if EDITSpeler2.Text = '' then
      begin
         QuestionDlg('FOUT', 'Je kan niet bewaren. ' +#13+
           'Alle waardes zijn niet ingevuld.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
         EDITSpeler2.SetFocus;
         EDITSpeler2.SelectAll;
         exit;
      end;
      if EDITSpeler3.Text = '' then
      begin
         QuestionDlg('FOUT', 'Je kan niet bewaren. ' +#13+
           'Alle waardes zijn niet ingevuld.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
         EDITSpeler3.SetFocus;
         EDITSpeler3.SelectAll;
         exit;
      end;
      if EDITSpeler4.Text = '' then
      begin
         QuestionDlg('FOUT', 'Je kan niet bewaren. ' +#13+
           'Alle waardes zijn niet ingevuld.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
         EDITSpeler4.SetFocus;
         EDITSpeler4.SelectAll;
         exit;
      end;
      // controleren of de som van min en plus altijd 0 is.
      if StrToInt(EDITSpeler1.Text) + StrToInt(EDITSpeler2.Text) +
         StrToInt(EDITSpeler3.Text) + StrToInt(EDITSpeler4.Text) <> 0 then
      begin
         QuestionDlg('FOUT', 'Je kan niet bewaren. ' +#13+
           'Som van getallen is niet 0.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
         exit;
      end;
      // blokkeer input
      btnSPELGEDAAN.Enabled:= false;
      ChBoxMIZERIE.Enabled:= false;
      ChBoxABONDANCE.Enabled:= false;
      ChBoxTROEL.Enabled:= false;
      ChBoxRONDEPAS.Enabled:= false;
      btnBEWAARPUNTEN.Enabled:= false;
      EDITSpeler1.Enabled:= false;
      EDITSpeler2.Enabled:= false;
      EDITSpeler3.Enabled:= false;
      EDITSpeler4.Enabled:= false;
      // vraag bewaarbevestiging
      varMessage:= 'Gift ' + IntToStr(varGift) +':';
      if (ChBoxTROEL.Checked) then
      begin
        varMessage:= varMessage + ' Troel';
      end;
      if (ChBoxRONDEPAS.Checked) then
      begin
        varMessage:= varMessage + ' Dubbel';
      end;
      If QuestionDlg ('KEUZE !',varMessage + #13 + 'Gegevens opslaan?' + #13 + '',
                       mtConfirmation,[mrYes,'OK', mrNo, 'Annuleren'],'') = mrYes then
      begin
        if (varGift <= varMaxGift) then
        begin
          // bewaar => pas de grid aan
          varRijGift:= (varGift * 2) - 1;
          varRijTotaal:= (varGift * 2);
          // de score van deze gift
          StringGrid1.Cells[1, varRijGift]:= EDITSpeler1.Text;
          StringGrid1.Cells[2, varRijGift]:= EDITSpeler2.Text;
          StringGrid1.Cells[3, varRijGift]:= EDITSpeler3.Text;
          StringGrid1.Cells[4, varRijGift]:= EDITSpeler4.Text;
         // de nieuwe totaal score
          varSpeler1Totaal := varSpeler1Totaal + StrToInt(EDITSpeler1.Text);
          varSpeler2Totaal := varSpeler2Totaal + StrToInt(EDITSpeler2.Text);
          varSpeler3Totaal := varSpeler3Totaal + StrToInt(EDITSpeler3.Text);
          varSpeler4Totaal := varSpeler4Totaal + StrToInt(EDITSpeler4.Text);
          StringGrid1.Cells[1, varRijTotaal] := IntToStr(varSpeler1Totaal);
          StringGrid1.Cells[2, varRijTotaal] := IntToStr(varSpeler2Totaal);
          StringGrid1.Cells[3, varRijTotaal] := IntToStr(varSpeler3Totaal);
          StringGrid1.Cells[4, varRijTotaal] := IntToStr(varSpeler4Totaal);
          // maak nieuwe gift beschikbaar
          varGift:= varGift + 1;
          Label1.Caption:= 'Gift ' + IntToStr(varGift) + ' van ' + IntToStr(varMaxGift) + '.';
          btnSPELGEDAAN.Enabled:= true;
          ChBoxMIZERIE.Enabled:= true;
          ChBoxMIZERIE.Checked:= false;
          ChBoxABONDANCE.Enabled:= true;
          ChBoxABONDANCE.Checked:= false;
          ChBoxTROEL.Enabled:= true;
          ChBoxTROEL.Checked:= false;
          ChBoxRONDEPAS.Enabled:= true;
          ChBoxRONDEPAS.Checked:= false;
          EDITSpeler1.Text:='';
          EDITSpeler2.Text:='';
          EDITSpeler3.Text:='';
          EDITSpeler4.Text:='';
        end
        else
        begin
          // GEDAAN!
          varGift := varMaxGift;
          QuestionDlg('INFO', 'Het zit er weer op! ' +#13+
              'Er is een winnaar.',mtInformation, [mrOk, 'DRUK HIER OP <--- '], '');
        end;
      end
      else
      begin
         ChBoxMIZERIE.Enabled:= true;
         ChBoxABONDANCE.Enabled:= true;
         ChBoxTROEL.Enabled:= true;
         ChBoxRONDEPAS.Enabled:= true;
         btnBEWAARPUNTEN.Enabled:= true;
         EDITSpeler1.Enabled:= true;
         EDITSpeler2.Enabled:= true;
         EDITSpeler3.Enabled:= true;
         EDITSpeler4.Enabled:= true;
      end;
    end;
    
    end.

  2. #2
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    668

    Exclamation

    Daar er geen reactie komt, mag ik veronderstellen dat deze vraag geen interesse wekt bij de programmeurs van "NL-DELPHI".
    Ik blijf zoeken op Google.

  3. #3
    Senior Member
    Join Date
    Jun 2005
    Location
    Tilburg
    Posts
    973
    Volgens mij heeft een stringgrid een TopRow property waarmee je het zou kunnen oplossen

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,555
    Het is geen desinteresse, maar aangezien dit NLDelphi is en niet NLCodeTyphon
    kan ik me voorstellen dat je doelgroep wat beperkter is.
    TMemoryLeak.Create(Nil);

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

    Exclamation

    VideoRipper,
    Het is geen desinteresse, maar aangezien dit NLDelphi is en niet NLCodeTyphon
    Gezien dit forum "NLDelphi" een rubriek heeft voor "DELPHI" en ook "FREE PASCAL / LAZARUS" waarop veel vragen en antwoorden worden geregistreerd, is uw verklaring niet echt relevant. Want CodeTyphon is een pakket dat voor 99,5% overeenstemt met Lazarus, of een "clone" van Lazarus.

  6. #6
    Hoewel er niet zoveel FPCers op het forum zitten is het stellen van de vraag op zich geen probleem.

    Het krijgen van een antwoord is echter wel gebonden aan hoe duidelijk je die vraag stelt. En aangezien ik niet helemaal begreep wat je bedoeling nou was, bleef mijn reactie uit.

    Dus ja, de vraag wekt zoveel interesse als hoe interessant en duidelijk die zelf is.

  7. #7
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,180
    Quote Originally Posted by rvk View Post
    Hoewel er niet zoveel FPCers op het forum zitten
    Dit is een volwassen forum, waarvan ik denk zeker de helft Lazarus of FPC gebruikt of heeft gebruikt...
    Het maakt niet veel uit.
    Werken aan Ansi support voor Windows is verspilde tijd, behalve voor historici.

  8. #8
    Dat de helft Lazarus of FPC gebruikt of heeft gebruikt zegt waarschijnlijk meer over het totaal aantal forummers hier dan over mijn statement dat het er sowieso niet zoveel zijn.

  9. #9
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    668

    Question

    Hopelijk is deze omschrijving iets duidelijker!

    Nu worden de ‘rows’ ingevuld (knop bewaar punten) tot op het einde van het zichtbare gedeelte van de stringgrid op de ‘form’. Dit zijn niet alle 25 rows, maar ongeveer de helft.
    De volgende rows die ingevuld worden zijn niet rechtstreeks zichtbaar op de form, tenzij er gescrold wordt.
    Ten minste de actuele en vorige ingevulde row(s) zouden dus steeds zichtbaar moeten zijn in de 'form', zodat de score van de punten steeds zichtbaar is.
    Dit wil zeggen de de verticale scrolling automatisch zou moeten.

  10. #10
    Quote Originally Posted by seghele View Post
    Ten minste de actuele en vorige ingevulde row(s) zouden dus steeds zichtbaar moeten zijn in de 'form', zodat de score van de punten steeds zichtbaar is.
    Dit wil zeggen de de verticale scrolling automatisch zou moeten.
    Nog steeds is het mij niet eigenlijk aan de hand van die omschrijving.

    Als je rows hebt een je ziet er maar 12, en je wilt verder scrollen dan zeg je dat je die 12 rows zichtbaar wilt houden. Dat kan natuurlijk niet.

    Is het dat je naast de fixed row aan de bovenkant met de namen, ook een fixed row aan de onderkant wil met de totaalscore?

    Echt... De omschrijving die je geeft is niet te begrijpen voor een programmeur. (Vandaar het gebrek aan antwoorden)

  11. #11
    Quote Originally Posted by seghele View Post
    Dit wil zeggen de de verticale scrolling automatisch zou moeten.
    Als "automatisch scrollen" het enige is dat je wilt... (dan had je dat gewoon kunnen zeggen)

    Dennis heeft daar al een antwoord op gegeven.
    Heb je daar al wat mee gedaan?

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

    Question

    Als "automatisch scrollen" het enige is dat je wilt... (dan had je dat gewoon kunnen zeggen)
    Tja, als NIET programmeur is het voor mij ook niet zo eenvoudig om een perfecte omschrijving te structureren.

    Ik probeer het nogmaals.
    De fixed row an de bovenkant met de namen moet natuurlijk altijd zichtbaar blijven.
    Er wordt na iedere input in de stringgrid een lijn verder gesprongen om klaar te staan voor nieuwe input. Op een zeker moment (na een 12 tal inputs) is de form visueel vol op het scherm.
    Als er dan een nieuwe input wordt toegevoegd, dan gebeurt dat, maar die is niet dadelijk zichtbaar.
    Dus zou er automatisch moeten worden gescrold, zodat de laatste input (en totaal score) steeds onderaan zichtbaar is.

    Dennis heeft daar al een antwoord op gegeven.
    Heb je daar al wat mee gedaan?
    Sorry, maar ik weet niet hoe 'TopRow property' mijn probleem kan oplossen.

  13. #13
    is er niet zoiets als een selected row of zo in die stringgrid?

  14. #14
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    668
    Ja, selected row bestaat.
    Maar hoe en waar dit verwerken?

  15. #15
    Na het vullen van een extra rij:
    StringGrid1.TopRow := StringGrid1.RowCount-StringGrid1.VisibleRowCount-1;

    Er zijn nog legio andere mogelijkheden.

    StringGrid1.Perform( WM_VSCROLL, SB_BOTTOM, 0 );

    Of

    StringGrid1.Row := StringGrid1.RowCount - 1;
    StringGrid1.Perform(EM_SCROLLCARET, 0, 0);

    En nog wel een paar methodes maar ik ben maar even gestopt met Googelen.

Page 1 of 3 1 2 3 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
  •