Page 2 of 3 FirstFirst 1 2 3 LastLast
Results 16 to 30 of 35

Thread: Stringgrid – Scrolling

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

    Question

    rvk,
    Code:
    ...
    ...
          StringGrid1.Cells[4, varRijTotaal] := IntToStr(varSpeler4Totaal);
    
          StringGrid1.TopRow := StringGrid1.RowCount-StringGrid1.VisibleRowCount-1; // scroll row
    
          // maak nieuwe gift beschikbaar    
    ...
    ...
    Indien de plaats van de nieuwe lijn code juist is, dan is er nog een probleem.
    Na input van het eerste spel is de score(punten) niet meer zichtbaar.
    Er wordt een nieuwe lege row getoond.
    Bedoeling is dat er minstens één (of liefst zo veel mogelijk) reeds ingevulde row(s) zichtbaar blijven bij het invullen van de volgende zichtbare lege row.

  2. #17
    Bedoeling is dat er minstens één (of liefst zo veel mogelijk) reeds ingevulde row(s) zichtbaar blijven bij het invullen van de volgende zichtbare lege row.
    Bij elke nieuwe row het schermfont 1 pitch kleiner maken?

    Die is onzin natuurlijk, maar je moet ook even wat creatief denken. Als ik je goed begrijp heb je 12 rijen die maximaal zichtbaar kunnen zijn in je grid. Je wilt dus de laatste nieuwe rij zien die je toevoegt aan het grid op de onderste regel van je grid. Dus je eerst zichtbare regel is je laatste itemnr - 12. Met de tips van RvK moet je er dan volgens mij kunnen komen.

    Alternatief is om van de stringgrid af te stappen en een dbGrid te gaan gebruiken. Hang daar een memory dataset achter en doe je handelingen op de dataset. Je grid past zich dan automatisch aan.

    Succes

  3. #18
    In de code die ik gaf ga ik ervan uit dat StringGrid1.RowCount de werkelijk laatst gevulde regel is. Als dat bij jou niet zo is, maar dat je een heleboel lege regels hebt dan moet je eerst bepalen hoeveel gevulde regels je hebt en moet je StringGrid1.RowCount in mijn code vervangen door dat aantal.

    Maar eigenlijk moet je rowcount in het begin op 1 zetten (met de personen) en elke keer als je een spel erbij zet de rowcount met één ophogen. Daarna werkt de regel die ik gaf goed.

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

    Question

    Zie de 3 jpg als voorbeeld.
    Wiezen1.jpg:
    Een lege grid, klar om ingevuld te worden.
    De stand van de giften staan dus nog op 1 van 20.
    Wiezen2.jpg:
    Teller staat op 7 van 20 giften.
    Dus reeds 6 giften ingevuld.
    Wiezen3.jpg:
    Teller staat op 8 van 20 giften.
    Dus reeds 7 giften ingevuld.
    -> Hier heb ik manueel een scrol naar beneden uitgevoerd.
    De eerste 2 giften zijn dan niet meer zichtbaar op de grid.
    *** -> Dit is wat ik bedoel.
    Telkens als er een nieuwe score wordt ingevuld, zou er automatisch verder naar beneden moeten gescrold worden, telkens van één gift.

    Hopelijk kan je mij verder helpen met de code.
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	Wiezen1.jpg 
Views:	64 
Size:	59.3 KB 
ID:	7580   Click image for larger version. 

Name:	Wiezen2.jpg 
Views:	64 
Size:	70.3 KB 
ID:	7581   Click image for larger version. 

Name:	Wiezen3.jpg 
Views:	64 
Size:	66.2 KB 
ID:	7582  

  5. #20
    En als je je code veranderd naar:

    Delphi Code:
    1. ...
    2. ...
    3.       StringGrid1.Cells[4, varRijTotaal] := IntToStr(varSpeler4Totaal);
    4.  
    5.       StringGrid1.TopRow := StringGrid1.varRijTotaal + 1; // scroll row
    6.  
    7.       // maak nieuwe gift beschikbaar    
    8. ...

    werkt dat?
    Niemand houdt meer van hard werken dan diegene die ervoor betaalt.

  6. #21
    Zoals ik al zei heb je nu dus alle rijen aangemaakt maar ze zijn leeg. Je moet dus in de code die ik gaf de rowcount vervangen door het totaal gevulde regels. Je vult de regel varRijTotaal (volgens mij).

    Dan zou de code na het vullen dus die moeten zijn:

    StringGrid1.TopRow := varRijTotaal -StringGrid1.VisibleRowCount-1;

  7. #22
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik denk dat je een herstructurering van je scoretabel moet overwegen.
    Is het belangrijk dat je voor elk gift de scoretotaal ziet?
    Wat als je de totaalscore plaatst onder de namen als fixed row?
    Als dat de mogelijkheid is, kan je met de vele mogelijkheden, die hier zijn aangegeven, een oplossing toepassen.
    Delphi is great. Lazarus is more powerfull

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

    Question

    rvk,
    Code:
         StringGrid1.Cells[4, varRijTotaal] := IntToStr(varSpeler4Totaal);
    
          StringGrid1.TopRow := varRijTotaal -StringGrid1.VisibleRowCount-1;
    
          // maak nieuwe gift beschikbaar
    Dit werkt, maar geeft geen oplossing voor het scrollen.
    Moet nog steeds zelf scrollen naar de volgende score nadat de eerste 12 zijn ingevuld, zodat men steeds dadelijk een zichtbaar heeft op het laatste spel(gift).
    :confused

    jkuiper

    Ik denk dat je een herstructurering van je scoretabel moet overwegen.
    Is het belangrijk dat je voor elk gift de scoretotaal ziet?
    Wat als je de totaalscore plaatst onder de namen als fixed row?
    Als dat de mogelijkheid is, kan je met de vele mogelijkheden, die hier zijn aangegeven, een oplossing toepassen.
    De totaalscore kan inderdaad onder de namen als fixed row.

    Maar kunnen de scores dan wel automatisch gescrold worden als de grid visueel op de form vol is?
    Zie info aan rvk hierboven.

    Ten spijt heb ik de kennis niet om zelfstandig de code aan te passen.

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

    Cool

    I rest my case.

    In ieder geval bedankt voor de inspanningen.

  10. #25
    Quote Originally Posted by seghele View Post
    Maar kunnen de scores dan wel automatisch gescrold worden als de grid visueel op de form vol is?
    Zie info aan rvk hierboven.

    Ten spijt heb ik de kennis niet om zelfstandig de code aan te passen.
    Heb je zelf wel een poging gewaagd ??

    Onderstaand scrolt prima de TStringGrid op het moment van toevoegen van een regel op varRijTotaal.

    Delphi Code:
    1. procedure TForm1.Button1Click(Sender: TObject);
    2. var
    3.   varRijTotaal: Integer;
    4. begin
    5.   for varRijTotaal := 1 to 500 do
    6.   begin
    7.     StringGrid1.Cells[1, varRijTotaal] := IntToStr(varRijTotaal);
    8.     StringGrid1.Cells[2, varRijTotaal] := DateTimeToStr(Now);
    9.  
    10.     StringGrid1.TopRow := varRijTotaal - StringGrid1.VisibleRowCount { - 1 } ; // -1 was teveel en misschien moet je zelfs + 1 doen
    11.  
    12.     Application.ProcessMessages;
    13.     Sleep(200); // geen sleep in productie gebruiken
    14.   end;
    15. end;

    Maar ook StringGrid1.Row := varRijTotaal scrolt je stringgrid naar de desbetreffende rij !!!

    Delphi Code:
    1. procedure TForm1.Button1Click(Sender: TObject);
    2. var
    3.   varRijTotaal: integer;
    4. begin
    5.   for varRijTotaal := 1 to 500 do
    6.   begin
    7.     StringGrid1.Cells[1, varRijTotaal] := IntToStr(varRijTotaal);
    8.     StringGrid1.Cells[2, varRijTotaal] := DateTimeToStr(Now);
    9.     // StringGrid1.TopRow := varRijTotaal - StringGrid1.VisibleRowCount;
    10.  
    11.     StringGrid1.Row := varRijTotaal; // Dit werkt dus ook prima !
    12.  
    13.     Application.ProcessMessages;
    14.     Sleep(200); // geen sleep in productie gebruiken
    15.   end;
    16. end;

    Beide suggesties zijn reeds genoemd zonder dat er een poging getracht is deze te verwerken.

  11. #26
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685
    rvk,
    Ik had toch een poging gedaan:
    rvk,
    Code:
    StringGrid1.Cells[4, varRijTotaal] := IntToStr(varSpeler4Totaal);

    StringGrid1.TopRow := varRijTotaal -StringGrid1.VisibleRowCount-1;

    // maak nieuwe gift beschikbaar

    Dit werkt, maar geeft geen oplossing voor het scrollen.
    Met "dit werkt" bedoelde ik dat er geen errors zijn.

    Sorry, maar jouw nieuw voorbeeld snap ik niet.
    De "For ... do" enz...

    Het gaat toch over volgende procedure:
    Code:
    procedure TFmain.btnBEWAARPUNTENClick(Sender: TObject);
    var
      varMessage: String;
      varRijGift: Integer;
      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);
          // om te scrollen
     // -> hier de code ...
    
    
          // 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;

  12. #27
    Quote Originally Posted by seghele View Post
    rvk,
    Ik had toch een poging gedaan:
    Met "dit werkt" bedoelde ik dat er geen errors zijn.
    Dat begrijp ik niet. Je hebt een poging gedaan.
    WAT heb je dan gedaan????
    Waar heb je welke code gezet????

    Sorry, maar jouw nieuw voorbeeld snap ik niet.
    Wat gebeurd er als je op dat stukje waar je commentaar voor scrollen hebt gezet de volgende regel zet?
    Delphi Code:
    1. // om te scrollen
    2. // -> hier de code ...
    3. StringGrid1.Row := varRijTotaal; // <----- deze dus

    (Dat bedoelde ik dus met een poging wagen, gewoon dingen proberen. Als je zelf geen dingen probeert kom je niet veel verder want je zult niet altijd kant en klare oplossingen aangedragen krijgen.)

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

    Thumbs up

    Deze code geeft de resultaten die ik hoopte te verkrijgen.
    Code:
    3.StringGrid1.Row := varRijTotaal;
    Voorlopig werkt alles prima.

    Ik weet echt niet of er nog een vervolg komt van mijnentwege op dit forum.
    Daar ik duidelijk begrijp dat 'programmeurs ' de doelgroep zijn, wat niet mijn geval is.
    Mag ik iedereen oprecht bedanken (in het bijzonder "rvk") voor het geduld en de inspanningen om mijn geliefde hobby op mijn 67 nog levendig te houden.
    (Eerst Paradox 5/7, dan Delphi 5/6/7 en nu CodeTyphon/Lazarus).
    Het coderen heb ik zelfstandig moeten aanleren, met als gevolg .... !

  14. #29
    Fijn dat het werkt.

    De doelgroep is inderdaad wel programmeurs (of afgeleiden daarvan) maar hoe je ook over jezelf denkt, daar zou jij ook onder vallen, ook als je wat aan het "freubelen" bent. Het hoeft niet snel te gaan. Maar je ziet dus dat, met één regel op de reeds door jou aangegeven plaats, het wel werkt. Ik heb een moeder die al hyper wordt als ze een knopje aan moet raken waarvan ze niet weet wat het doet. Maar mijn Oma* hebben we op 88 jarige leeftijd nog leren e-mailen en internetten. Leeftijd hoeft op zich niet zoveel uit te maken zolang je maar code durft te wijzigen en kijken wat het brengt (wel met een goede backup).

    Ik hoop dat je je geliefde hobby dus wel uit blijft voeren en aan je code durft te blijven sleutelen.

  15. #30
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by seghele View Post
    Het coderen heb ik zelfstandig moeten aanleren, met als gevolg .... !
    Join the club. I heb nog nooit een cursus Pascal gedaan. Maar met trial and error en wat hulp van dit forum en internet ben ik toch aardig weggekomen.

    Als in de wereld niets werd uitgeprobeerd, zaten we nog in het stenen tijdperk
    Delphi is great. Lazarus is more powerfull

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