Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid Zeile per Mausclick auslesen (https://www.delphipraxis.net/121427-stringgrid-zeile-per-mausclick-auslesen.html)

taaktaak 10. Okt 2008 07:05

Re: StringGrid Zeile per Mausclick auslesen
 
Guten Morgen Michael.

Freut mich, dass ich dir schon etwas weiterhelfen konnte. Die Anzeige der überflüssigen Zeile im Grid ist logisch, da ich es im Code leider nicht berücksichtigt habe.

Das Grid verhält sich allerdings anders, als man vielleicht erwartet: Durch Verringerung von RowCount werden die Inhalte der reduzierten Zeilen nicht gelöscht. Vergrößert man RowCount anschließend wieder, werden die vermeintlich entfernten Zeileninhalte wieder angezeigt. Tatsächlich gelöscht werden Einträge mit "StringGrid.Rows[..].Clear".

In deinem konkreten Fall gibt es (wie fast immer) verschiedene Möglichkeiten, das gewünschte zu erreichen. Als "Hau-Ruck-Methode" könnte man vor dem erneuten Füllen des Grids alle vorhandenen Zeilen löschen, die Zeilenanzahl des Grids aber konstant lassen.

Delphi-Quellcode:
procedure RefillGrid;
var i : Integer;
begin
  assignfile(ChemDat,Dateiname);
  reset(ChemDat);

  with StringGrid1 do begin

    for i:=FixedRows to RowCount-1 do Rows[i].Clear; // löscht ALLE Zeilen
    // oder
    // RowCount:=RowCount-1;                        // alternativ

    for i:=1 to FileSize(ChemDat) do begin
      read(ChemDat,Chem);
      with Chem do begin
        Cells[1,i]:=IntToStr(BNum);
        Cells[2,i]:=Name;
        Cells[3,i]:=IntToStr(Bestand);
        Cells[4,i]:=Datum
        end
    end;
  closefile(ChemDat);
end;
Alternativ könnte die Zeilenanzahl immer exakt der Anzahl der Datensätze+FixedRows entsprechen, d.h. nach einer Löschoperation "RowCount:=RowCount-1". Ich mag es aber z.B. nicht, wenn weniger Gridzeilen gezeichnet werden, als bei der verfügbaren Höhe des Controls darstellbar wären. In diesem Fall füge ich immer eine entsprechende Anzahl von Leerzeilen ein - aber das ist Geschmackssache.

Mich würde mal interessieren, wieviele Datensätze in deinem Grid voraussichtlich gespeichert werden sollen. Spätestens, wenn du einige Tausend Datensätze im Grid sortieren oder filtern möchtest, wirst du die begrenzten Möglichkeiten des StringGrids an spürbar langen Sortierzeiten erkennen. Wenn derartige Größenordnungen bei dir anfallen, dann sollte das ganze entweder mit einer Datenbank gelöst oder die Datenspeicherung in einer Liste erfolgen und das Grid nur noch zur Anzeige der sichtbaren Daten genutzt werden.

klausmaus 10. Okt 2008 13:52

Re: StringGrid Zeile per Mausclick auslesen
 
Hallo Ralph,

zu deiner Frage. Ich schrieb am Anfang, dass ich ein Newbie bin. Und zwar absolut. Da ich mit dem Rechner einigermaßen umgehen und ihn auch mal reparieren kann (selbst angeeignet) hab ich beschlossen, berufsbegleitend Informatik zu studieren. Im 2.Semester war Delphi das Thema (1.Semester LOGO). Vorlesung und Seminar im Wechsel. Hauptinhalt: Algorithmierung. Umsetzung in Quelltext sollte in Hausarbeit erfolgen. Hinweis der Seminarleiter: Wenn sie was nicht wissen, nutzen sie die Hilfe (Delphi 2005). Daher rühren auch meine zum Teil naiven Fragen, da diese "Hilfe" nur wenig hilft.

Als Beleg sollte über die Semesterpause ein Programm zu einem selbstgewählten Thema/Inhalt angefertigt werden. Vorgabe: Einbinden von Dateiarbeit (wurde im letzten Seminar kurz angeschnitten).

Meine Kommilitonen haben größtenteils mathemat. Hintergrund. Ergo: Mathematische Berechnungen. Da ich aus der Chemie komme, hab ich mich für eine Chemikalienbestandsverwaltung entschieden. Normalerweise sollte das eine Datenbank sein. Da wir so was noch nie gemacht haben (und freies Delphi keine DB-Komponente enhält) blieb nur ein StringGrid.

Ich habe es auf 200 Datensätze ausgelegt. Also recht klein.
Verwenden werde ich das Programm nicht - es gibt recht gute und viel komfortablere Lösungen (auch kostenfrei) am Markt.

Ich habe es als Übung angesehen, um sich mit Delphi als Programmierwerkzeug vertraut zu machen. Ich hätte allerdings nicht gedacht, dass es so viel Zeit kostet (arbeite seit Ende Sommersemester dran). Lag vermutlich an meinerseits nicht vorhandener Projektplanung. Im Laufe der Entwicklung wurde es auch immer umfangreicher.

Wenn ich das Ganze nicht nächste Woche abgeben müsste, würde ich glatt nochmal von vorn anfangen und vieles anders machen. Stattdessen hab ich mit Hilfe deiner Tipps etwas Struktur in den Quelltext gebracht.

Werde mich am WE mal mit dem Abfangen von Fehleingaben weiter beschäftigen. (Ist auch eine Forderung für den Beleg).

Wie du siehst: Noch reichlich Arbeit. Bin aber froh, dass es im Großen und Ganzen funktioniert.

Wünsche ein angenehmes WE
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz