TStringGrid (gelöst)
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
TStringGrid (gelöst)
Moin,
ich würde gerne mit dem StringGrid Arbeiten komme jedoch nicht richtig voran. Zum einen finde ich schonmal keine Option die Spaltenbreite für jede Spalte festzulegen(am besten wäre es wenn zudem der Benutzer mit einem Klick im header diese selber setzen könnte) zum anderen Weiß ich nicht so richtig welches Event ich nutzen soll wenn ich bei einem Zeilenwechsel etwas machen möchte. Also sobald der Benutzer eine neue Zeile auswählt soll etwas gemacht werden.
ich würde gerne mit dem StringGrid Arbeiten komme jedoch nicht richtig voran. Zum einen finde ich schonmal keine Option die Spaltenbreite für jede Spalte festzulegen(am besten wäre es wenn zudem der Benutzer mit einem Klick im header diese selber setzen könnte) zum anderen Weiß ich nicht so richtig welches Event ich nutzen soll wenn ich bei einem Zeilenwechsel etwas machen möchte. Also sobald der Benutzer eine neue Zeile auswählt soll etwas gemacht werden.
Zuletzt geändert von Bauer321 am So 11. Sep 2011, 13:53, insgesamt 1-mal geändert.
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: TStringGrid
Du suchst nach ColWidth[<Spalte>], Options+[goColSizing], OnCellSelect() und insbesondere http://wiki.lazarus.freepascal.org/Grids_Reference_Page" onclick="window.open(this.href);return false;.
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: TStringGrid
ok vielen dank ich werd das ma alles austesten. Das ich das richtige event nicht gefunden hab hat damit zu tun das ich tests mit showmessage gemacht habe wodurch irgendwie fehler entstanden sind also das program hat irgendwie nicht erkannt das der klick zu ende ist und dann alle anderen spalten mit ausgewählt wodurch ich mit messages überflutet wurde. Hab danach mit einem Memo getestet und bin zu dem ergebnis gekommen das OnBeforeSelection das richtige event für mein vorhaben ist 
edit:
bei folgendem code:
bekomme ich diese Meldung:
edit2:
Fehler gefunden
so ists richtig:

edit:
bei folgendem code:
Code: Alles auswählen
//SGVersions ist ein TSringGrid
SGVersions.ColWidth[0] := 150; //Zeile 51
Code: Alles auswählen
uaddver.pas(51,14) Error: identifier idents no member "ColWidth"
Fehler gefunden
so ists richtig:
Code: Alles auswählen
SGVersions.ColWidths[0] := 150; //Widths mit s
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: TStringGrid
wie kann ich die momentan ausgewählte Zeile löschen? Also nicht nur das Feld sondern die Ganze Zeile soll weg sein.
Oder muss ich dazu allen Einträge danach eine Spalte nach oben verlegen und dann die unterste löschen?
Oder muss ich dazu allen Einträge danach eine Spalte nach oben verlegen und dann die unterste löschen?
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: TStringGrid
Code: Alles auswählen
TStringGrid.DeletRow(TStringGrid.Row);
Wenn du mehrere Einträge löschen willst nim BeginUpdate und EndUpdate um redudanten Code nicht mehrmals auszuführen ...
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: TStringGrid
Danke bin zar nicht mehr am pc werds morgen aber sofort ma testen.
Das mit dem begin und end update nutze ich bereit
auch wenn ich das nicht erklären kann weiß ich das das programm dadurch flüssiger wird (ich weiß noch wie ich früher in nen memo 1000 einträge gemacht habe ohne begin und endupdate ... da hieß es warten mit begin und endupdate wars gar kein problem mehr. Ob man einen oder 1000 einträge macht merkt man dann nicht mal mehr)
Das mit dem begin und end update nutze ich bereit

www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: TStringGrid
Das ist ganz einfach zu erklären:
Hier ein beispiel mit einer Listbox (gleiches Prinzip)
Wenn man das jetzt ausführt passiert folgendes:
1.Zeile:
alles wird gelscöht.
Box wird neu gezichnet.
2.Eintrag
--> Box und ein Eintrag wird gezeichnet.
3.Eintrag
--> Box und 2 Einträge werden gezeichnet.
4. Width geändert
--> Box und 2 Einträge werden gezeichnet.
Das ganze passiert in 10 ms.
Und eigentlich will der Programmierer garnicht das in zeile 1-3 Gezeichnet wird (denn zeichnen ist langsam (deswegen haben viele ne 200 € graka ^^ und auf der CPU zu zeichnen ist noch schlimmer..))
Deswegen das BeginUpdate und EndUpdate;
Es wird zwar etwas geändert, aber das Objekt zeichnent nicht neu. Es wartet mit dem Zeichen auf das EndUpdate ...
Und in deinem Beispiel mit 1000 Einträgen würde das Bedeuten :
1000 mal wird die Box gezeichnet
und es werden 1+2+3+4+5+6+7..+998+999+1000 Einträge gezeichnet = 501000 !!! und im vergleich dazu sind 1000 nichts ...
Hier ein beispiel mit einer Listbox (gleiches Prinzip)
Code: Alles auswählen
Listbox1.Clear;
Listbox1.Add('Test1');
Listbox1.Add('Test2');
Listbox1.Wdith := 100;
1.Zeile:
alles wird gelscöht.
Box wird neu gezichnet.
2.Eintrag
--> Box und ein Eintrag wird gezeichnet.
3.Eintrag
--> Box und 2 Einträge werden gezeichnet.
4. Width geändert
--> Box und 2 Einträge werden gezeichnet.
Das ganze passiert in 10 ms.
Und eigentlich will der Programmierer garnicht das in zeile 1-3 Gezeichnet wird (denn zeichnen ist langsam (deswegen haben viele ne 200 € graka ^^ und auf der CPU zu zeichnen ist noch schlimmer..))
Deswegen das BeginUpdate und EndUpdate;
Es wird zwar etwas geändert, aber das Objekt zeichnent nicht neu. Es wartet mit dem Zeichen auf das EndUpdate ...
Und in deinem Beispiel mit 1000 Einträgen würde das Bedeuten :
1000 mal wird die Box gezeichnet
und es werden 1+2+3+4+5+6+7..+998+999+1000 Einträge gezeichnet = 501000 !!! und im vergleich dazu sind 1000 nichts ...
Zuletzt geändert von MAC am So 11. Sep 2011, 14:44, insgesamt 1-mal geändert.
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: TStringGrid
ja so in etwa hab ich mir das schon gedacht
danke nochmal für die erklärung. war sehr leicht zu verstehen

www.mcpatcher.net | www.hoeper.me