Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wieder probleme mit Record und LV (https://www.delphipraxis.net/1212-wieder-probleme-mit-record-und-lv.html)

Daniel B 1. Nov 2002 15:07


Wieder probleme mit Record und LV
 
Hallöchen,

also, im folgenden Source, füge ich den Inhalt von 6 Edits in einen Record. Und zähle dabei eine Variable namen LokAnzahl hoch. Soweit, sogut.

Code:
[b]procedure[/b] TMainFormMC2004.ButtonKKLokOKClick(Sender: TObject);
[b]var[/b]
  i: integer;
[b]begin[/b]
  [b]if[/b] IDFLok = False [b]then[/b]
  [b]begin[/b]
    [b]if[/b] IDFMtr = False [b]then[/b]
    [b]begin[/b]
      [b]if[/b] Length(EditKKLokID.Text) > 0 [b]then[/b]
      [b]begin[/b]
        SetLength(MC2004.MenueInit.LokStamm, MC2004.MenueInit.LokAnzahl +1);
        i := MC2004.MenueInit.LokAnzahl;
        [b]with[/b] MC2004.MenueInit.LokStamm[i] [b]do[/b]
        [b]begin[/b]
          LokID := StrToInt(EditKKLokID.Text);
          LokName := EditKKLokName.Text;
          LokAdresse := StrToIntDef(EditKKLokAdresse.Text, 0);
          LokTraeg := StrToIntDef(EditKKLokTraeg.Text, 0);
          LokBeschl := StrToIntDef(EditKKLokBeschl.Text, 0);
          LokVerzoeg := StrToIntDef(EditKKLokVerzoeg.Text, 0);
        [b]end[/b];
        Inc(MC2004.MenueInit.LokAnzahl);
        LVLokFuellen;
      [b]end[/b]
      [b]else[/b]
      [b]begin[/b]
        ShowMessage('Bitte erst eine ID eingeben!');
      [b]end[/b];
    [b]end[/b]
    [b]else[/b]
    [b]begin[/b]
      ShowMessage('Die ID ist bereits einer Multitraktion zugewiesen!');
    [b]end[/b];
  [b]end[/b]
  [b]else[/b]
  [b]begin[/b]
    ShowMessage('Die ID ist bereits einer Lok zugewiesen!');
  [b]end[/b];
  ColumnToSort := 0;
  ListViewKKLok.AlphaSort;
  EditKKLokID.Clear;
  EditKKLokName.Clear;
  EditKKLokAdresse.Clear;
  EditKKLokTraeg.Clear;
  EditKKLokBeschl.Clear;
  EditKKLokVerzoeg.Clear;
  EditKKLokID.SetFocus;
  Check;
[b]end[/b];
Die Prozedur LVLokFuellen, sollte! mir den Inhalt des Records bz. des Arrays, in der LV anzeigen. Das Problem ist, es wird immer nur der letzte Eintrag in der LV angezeigt.
Die VAr LokAnzahl steigt aber mit jedem einfügen so wie es soll, lass ich mir mittels ShowMessage anzeigen.

Code:
[b]procedure[/b] TMainFormMC2004.LVLokFuellen;
[b]var[/b]
  i: integer;
[b]begin[/b]
  ListViewKKLok.Clear;
  ListViewKKLok.Items.Add;
  [b]for[/b] i := 0 [b]to[/b] MC2004.MenueInit.LokAnzahl -1 [b]do[/b]
  [b]begin[/b]
    [b]with[/b] ListViewKKLok.Items.Item[ListViewKKLok.Items.Count -1] [b]do[/b]
    [b]begin[/b]
      Caption := IntToStr(MC2004.MenueInit.LokStamm[i].LokID);
      SubItems.Add(MC2004.MenueInit.LokStamm[i].LokName);
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokAdresse));
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokTraeg));
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokBeschl));
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokVerzoeg));
    [b]end[/b];
  [b]end[/b];
[b]end[/b];
Da wo in der oberen Prozedur LVLokFuellen steht, stand früher der Code, der jetzt in der Prozedur LVLokFuellen steht. Eigentlich nichts wildes. Nur das vorher am Anfang LV.Clear; ist neu.

Ich blick da jetzt ncht durch warum es nicht geht, bzw. warum mir nur der letzte Eintrag in der LV angezeigt wird.
Vielen Dank.

Grüsse, Daniel :hi:

Christian Seehase 1. Nov 2002 15:38

Moin Daniel B,

Du musst für jede Zeile die Du im Listview hinzufügen willst ListView.Item.Add ausführen.

Code:
[b]procedure[/b] TMainFormMC2004.LVLokFuellen;
[color=#000080]//ListView KK Loks mit Daten aus dem Loks-Record füllen [/color]
[b]var[/b]
  i: integer;
[b]begin[/b]
  ListViewKKLok.Clear;
  [b]for[/b] i := 0 [b]to[/b] MC2004.MenueInit.LokAnzahl -1 [b]do[/b]
  [b]begin[/b]
    [color=red]ListViewKKLok.Items.Add;[/color]
    [b]with[/b] ListViewKKLok.Items.Item[ListViewKKLok.Items.Count -1] [b]do[/b]
    [b]begin[/b]
      Caption := IntToStr(MC2004.MenueInit.LokStamm[i].LokID);
      SubItems.Add(MC2004.MenueInit.LokStamm[i].LokName);
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokAdresse));
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokTraeg));
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokBeschl));
      SubItems.Add(IntToStr(MC2004.MenueInit.LokStamm[i].LokVerzoeg));
    [b]end[/b];
  [b]end[/b];
[b]end[/b];

Daniel B 1. Nov 2002 15:43

:oops: Du weisst ja, Wald, Bäume, ... :oops:

MathiasSimmack 1. Nov 2002 15:45

Re: Wieder probleme mit Record und LV
 
Zitat:

Zitat von Daniel B
(...)

Ihr solltet wirklich mal den Code-Formatter prüfen.
Da fehlt doch das "i" in der Zeile
Code:
with MC2004.MenueInit.LokStamm do
und wird als kursiv miss-deutet.

Daniel B 2. Nov 2002 08:26

Es müsste sogar Deiner sein Mathias. DelphpBB, mit dem weissen Logo, wo nur phpBB drin steht. Der von Christian ist es jedenfalls nicht.

:hi:

MathiasSimmack 2. Nov 2002 09:27

Da muss ich mal ernsthaft widersprechen. Nachdem Luckie solch "fehlerhaften" Code postete und in AUQ.de einen Link zu dem Tool angab, das er nutzt (meins!), da habe ich das auch gedacht. Aber:
Code:
[b]var[/b]
  i : integer;
[b]begin[/b]
  [b]for[/b] i := 1 [b]to[/b] 1000 [b]do[/b]
    [b]if[/b](Items[i] = 'Hallo, Welt') [b]then[/b]
      inc(z);
[b]end[/b];
Mal unabhängig von der Logik dieser Funktion ...

Einzig: ich habe gestern eine neue Version hochgeladen, in der ich den Begriff "name" vorerst deaktiviert habe. Wie sich rausstellte, wurde dieser Begriff z.B. hier fett formatiert:
Code:
ds.[b]Name[/b] // <-- "ds" = "TSearchRec"
Das machen auch Programme mit SynEdit so (Proton, als Beispiel). In meiner Delphi-IDE wird dieser Begriff allerdings niemals in irgendeiner Form hervorgehoben. Auch nicht bei der "exports"-Sektion von DLLs. Insofern ist das das einzige Fixing am Programm.

Daniel B 2. Nov 2002 09:40

[OT]
 
Hmm, kannst Du mir mal einen Link von dem Schicken, den Du benutzt? Danke.

MathiasSimmack 2. Nov 2002 10:34

Ah! 8)

Ich kenne den Grund, glaube ich. Wenn du den letzten Kommentar
Code:
//Buttons Enablen/Disablen
mal weglässt, wird der Code korrekt formatiert. Ich erinnere mich dunkel, dass Daniel (der Admin, nicht du!) mal sagte, die Foren-Software akzeptiert das I und B (usw.) in eckigen Klammern, solange es kein schließendes Element dazukommt. In diesem Fall ist der letzte Kommentar aber dieses schließende Element, und die Foren-Software interpretiert es als kursive Schrift. Das erkennt man ja auch prima an dem
Code:
[i]
vor dem Kommentar in deinem Beispielcode, Daniel.

Es ist also IMHO eine Unverträglichkeit. Eine Lösung habe ich ehrlich gesagt nicht, aber als Work-Around schlage ich vor, in solchen Fällen auf Kommentare u.ä. zu verzichten, wenn man phpBB-typische Syntaxelemente als und im Code benutzt. Will sagen: im Fall des eingeklammerten I sollte man danach also keine Kommentare mehr benutzen.

Daniel B 2. Nov 2002 10:39

Auch Ah :!:

Hab jetzt mal die Kommentare raus, jetzt stimmt es. Muss wohl in Zukunft die Kommentare immer rausschmeissen.

C'Ya :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.

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