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

Thread: StringGrid

  1. #1

    StringGrid

    Graag had ik de indelingen van de rijen en kolomen met code ingesteld maar dat krijg ik niet gevonden, is dat wel mogelijk ?

    Ook wil ik de Header weg hebben, maar is dat wel mogelijk ?

    En ik ondervindt problemen met het afvragen van welke regel/kolom ik aangeklikt heb:

    Code:
    procedure TForm5.StringGrid1Tap(Sender: TObject; const Point: TPointF); 
    begin
     Label1.Text := StringGrid1.Cells[ StringGrid1.ColumnIndex, StringGrid1.Selected];
    end;
    Stel dat ik eerst klik op Item [1,1], dan krijg ik dat nog niet te zien in de Label.
    Maar pas als ik op een ander Item klik krijg ik de inhoud van [1,1] te zien.
    Ik heb inmiddels van alles geprobeerd maar kom helaas niet verder.
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	5.jpg 
Views:	206 
Size:	95.6 KB 
ID:	7433  
    Last edited by MMSoft; 16-Nov-16 at 18:08.

  2. #2
    Heb je al in de Options van je TStringGrid gekeken?
    Daar staat een Header die je op false kunt zetten
    Tevens zou ik daar ook RowSelect op true zetten zodat je altijd een hele rij selecteert.

    Verder neem ik aan dat je alleen het adres nodig hebt uit de 2e kolom.
    Dan zou je dus niet naar Column van Selected moeten kijken maar gewoon Column 1 (= 2e kolom) moeten pakken.

    Dan de reden waarom je elke keer de laatst geselecteerde cell krijgt en niet degene die je aanklikt.
    Dit komt omdat je Selected gebruikt en OnTap/OnSelect gebeurd VOORDAT de nieuwe cell geactiveerd wordt.

    Je krijgt in OnTap een FPoint mee waarmee je de nieuwe cell moet berekenen.
    Maar waarom gebruik je niet OnSelect. Daar krijg je gelijk een ARow mee.

    Delphi Code:
    1. procedure TForm5.StringGrid1SelectCell(Sender: TObject; const ACol,
    2.   ARow: Integer; var CanSelect: Boolean);
    3. begin
    4.   Label1.Text := StringGrid1.Cells[1, ARow];
    5. end;
    Last edited by rvk; 16-Nov-16 at 19:24.

  3. #3
    Perfect !

    Met StringGrid1.RowHeight := 30;
    Kan de Regel hoogte ingesteld worden.
    Maar is het met code ook mogelijk om de breedte van de Cell's in te stellen ?
    Dus Cell 1 := 20; Cell 2 := 55; Cell 3 := 0; //0 omdat ik een paar Cellen wil gebruiken maar deze niet tonen.

    Heeft de TStringGrid standaard een mogelijkheid om 1 Rij geheel, 1 positie naar onder of boven te verplaatsen ?

    Heeft de TStringGrid standaard een mogelijkheid om 1 Rij geheel te verwijderen.
    Dus dat deze niet leeg is, maar uit het overzicht weg is.
    Last edited by MMSoft; 16-Nov-16 at 21:40.

  4. #4
    Even afgezien van de andere vragen... komen deze gegevens niet uit een sqlite database? Is het dan niet handiger om daar een volgnr in te stellen en die aan te passen wanneer je een regel omhoog wilt schuiven? Dan onthoudt ie dat ook voor de volgende keer. Het lijkt mij dan makkelijker in direct met een tdbgrid (of livebinding) te werken. Of zie ik dat verkeerd?

  5. #5
    Hiervoor wordt geen sqlite database gebruikt (althans dat was niet mijn bedoeling).
    Deze gegevens veranderen de gehele dag en het komt slecht een enkele keer voor dat ik deze wil bewaren.

    Nu bedenk ik mij wel dat het beter is dat deze gegevens in een (.itn) bestand opgeslagen worden voor het geval de GSM vast loopt (dat komt helaas een enkele keer voor) en dat de gegevens er dan nog zijn.
    En stel dat ik de gegevens wil bewaren, dat ik deze dan in een (.itn) bestand op kan slaan.

    Een .itn bestand is een tekst bestand:
    http://www.reviversoft.com/nl/file-extensions/itn

    Voorbeeld van een .itn bestand:
    468874|5181632|Badweg 3, 3312 AB, DORDRECHT|0|
    463046|5181508|Plantageweg 3 b, 3333 GZ, ZWIJNDRECHT|0|
    459683|5191598|Patrijzenstraat 57, 2922 GN, KRIMPEN AAN DEN IJSSEL|2|
    Last edited by MMSoft; 17-Nov-16 at 09:43.

  6. #6
    Ja, voor een wijziging in volgorde zou ik dat dan in het itn-bestand doen en die dan direct opnieuw inlezen in de stringgrid. Dan is het gelijk na een crash weer beschikbaar. (Je kunt dat natuurlijk ook doen tijdens het wegschrijven)

    Voor de kolombreedte zou je colwidth[array] moeten hebben (geloof ik, als de compatibiliteit enigzins is gebleven met vlc).

    (Maar je hebt nu toch al verschillende breedtes in de kolommen in jouw voorbeeld plaatje?)

  7. #7
    (Maar je hebt nu toch al verschillende breedtes in de kolommen in jouw voorbeeld plaatje?)
    Klopt, maar de breedtes instellen met code lijkt mij nauwkeuriger te doen dan een beetje slepen met de vakjes en hopen dat het goed is.

    Ik heb voorheen ook al eens een StringGrid gebruikt waarbij ik van alles kon wijzigen, maar er is zoveel veranderd dat je bijna weer helemaal opnieuw moet beginnen. Ook de voorbeelden die je tegenkomt kloppen heel vaak niet meer met deze laatste nieuwe opzet...

  8. #8
    Ok, de columnwidth bestaat niet in FMX voor TStringGrid.

    Je kunt gewoon dit doen:
    Delphi Code:
    1. StringGrid1.Columns[0].Width := 0; // of een andere waarde

  9. #9
    Ik had deze net gevonden

    StringGrid1.Columns[0].Width:= 20;
    StringGrid1.Columns[1].Width:= 180;
    StringGrid1.Columns[2].Width:= 0;
    StringGrid1.Columns[3].Width:= 0;

    Tevens ben ik aan het zoeken hoe ik één Cell kan wijzigen van kleur.

    Als ik dit als voorbeeld gebruik:
    http://www.raize.com/Articles/FmxStr...dCellFonts.asp

    Hoe geef ik dan precies op welke Cell ik wil bewerken ?

    StringGrid1. ??? .FontColor := claBlueViolet;

    Want zo werkt het niet:
    StringGrid1.Columns[1].CellControlByRow[1].FontColor := claBlueViolet;
    StringGrid1.Cells[1,1].FontColor := claBlueViolet;
    Last edited by MMSoft; 17-Nov-16 at 13:50.

  10. #10
    De OnDrawColumnCell werkt toch nog gewoon??

    Delphi Code:
    1. procedure TForm11.StringGrid1DrawColumnCell(Sender: TObject;
    2.   const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
    3.   const Row: Integer; const Value: TValue; const State: TGridDrawStates);
    4. begin
    5.  
    6.   if (Row = 2) and (Column.Index = 2) then
    7.   begin
    8.     TStringGrid(Sender).DefaultDrawing := false; // <-- wel nodig
    9.     Canvas.Fill.Color := TAlphaColors.Red;
    10.     Canvas.FillText(Bounds, (Value.AsString), false, 100, [], TTextAlign.taLeading, TTextAlign.taCenter);
    11.   end;
    12.  
    13. end;

  11. #11
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Dan lees je het niet goed. Je moet de juiste cell vinden
    Delphi Code:
    1. CellCtrl := TColumnAccess( StringGrid1.Columns[ 1 ] ).CellControlByRow( 1 );
    2.       if ( CellCtrl <> nil ) and ( CellCtrl is TTextCell ) then
    3.       begin
    4.         TTextCell( CellCtrl ).StyledSettings := [];
    5.         TTextCell( CellCtrl ).FontColor := claBlueViolet;
    6.       end;
    Volgens mij zal jij inmiddels wel moeten weten dat je in FM de inherited properties niet standaard kan benaderen zoals met VCL.

    of OnDrawColumnCell zoals rvk net voor mij vertelt

    [edit]
    oke. Iets lastiger dan verwacht. CellControlByRow() als TTextCell worden niet gevonden. Maar dat kan ook zijn doordat raize components extra objecten meelevert om een cel te benaderen.
    Last edited by jkuiper; 17-Nov-16 at 15:35.
    Delphi is great. Lazarus is more powerfull

  12. #12
    Kan dat niet (meer) op de gemakkelijke manier door in één opdracht op te geven welke Cell, je gekleurd wilt hebben ?

  13. #13
    Tot Delphi XE7 of XE8 kun je het nog op de manier doen zoals op die pagina vermeld staat. Maar dan niet je het wel extract op diezelfde manier doen, dus met TColumnAccess.

    Daarna (groter dan XE8) moet je het in ondrawcolumncel doen.
    (CellControlByRow bestaat dan n.l. niet meer)

    Dus als je die code op die pagina gebruikt... wat werkt er dan niet of welke foutmelding krijg je?

  14. #14
    Ik heb die code (nog) niet gebruikt, ik was aan het zoeken om het met één opdracht te doen, maar dat kan dus niet meer ?

    Even iets anders, ik loopt tegen een vreemd probleem aan, namelijk het selecteren van de laatste regel van een StringGrid werkt niet of na vaak drukken met heel veel moeite. Alle andere regels kan ik wel normaal selecteren.
    Ik gebruik de 'StringGrid1SelectCell' Event. Hoe zou dat komen ?

  15. #15
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik zal gebruik maken van livebindings. Scheelt een hoop ellende (levert natuurlijk weer andere problemen op, maar daar hebben we even niet over ....).
    Delphi is great. Lazarus is more powerfull

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
  •