Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit DELETE ??? (https://www.delphipraxis.net/191371-problem-mit-delete.html)

markus5766h 8. Jan 2017 16:19

Problem mit DELETE ???
 
Moin, zusammen.

Kann mir bitte dies mal jemand erklären ?
Code:
var
  n, l, l2, i, r, sn : Byte;
  p : Integer;
  S : String;
  S2 : String;
  IndexList : TStringlist;
...
with MediaListView.Items.Add do
  begin
    Caption := SearchList[2].Strings[n];
    SubItems.Add(SearchList[2].Strings[n]);
    SubItems.Add(SearchList[5].Strings[n]);
    SubItems.Add(SearchList[1].Strings[n]);
    S := MediaList[1].Strings[n];
    p := Pos(Chr(19), S);
    Delete(S, 1, p);                            // ID <-------(950)
    p := Pos(Chr(19), S);
    S := Copy(S, 1, p);                         // FileName
    Delete(S, 1, p);                            <--------------(953)
    S := Copy(S, 1, Length(S));                 // ext Daten
    SubItems.Add(S);
    SubItems.Add(AddZero(IntToStr(i), 6));
  end;
Fehlermeldung :
[Error] uMain.pas(950): Too many actual parameters
[Error] uMain.pas(953): Too many actual parameters

ich steh' ziemlich auf dem Schlauch . . . :gruebel::gruebel::gruebel::gruebel::gruebel:

Uwe Raabe 8. Jan 2017 16:21

AW: Problem mit DELETE ???
 
Kick mal das
Delphi-Quellcode:
with
raus!

markus5766h 8. Jan 2017 16:34

AW: Problem mit DELETE ???
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1358399)
Kick mal das
Delphi-Quellcode:
with
raus!

ah danke . . . logisch, das Delete bezieht sich dann auf die TListView und nicht auf den String . . .
... die Geschichte mit dem Wald und den Bäumen . . .:oops:

nahpets 8. Jan 2017 16:35

AW: Problem mit DELETE ???
 
oder schreib vor das Delete mal System.

Durch das With weiß der Compiler nicht, dass er hier nicht das Delete von MediaListView.Items nehmen soll, sondern die Prozedur Delete aus System.

Beim Delete meint er, so wie es ist, er solle ein Element aus MediaListView.Items löschen. Und da ist die Parameterzahl halt 'ne andere.

markus5766h 8. Jan 2017 16:40

AW: Problem mit DELETE ???
 
hab's jetzt so geändert - ist auch etwas übersichtlicher

Code:
  S := MediaList[1].Strings[n];
  p := Pos(Chr(19), S);
  Delete(S, 1, p);                            // ID
  p := Pos(Chr(19), S);
  S2 := Copy(S, 1, p-1);                      // FileName
  Delete(S, 1, p);
  S := Copy(S, 1, Length(S));                 // ext Daten
  S2 := ExtractFileExt(S2);                   // File Extension
  with MediaListView.Items.Add do
    begin
      Caption := SearchList[2].Strings[n];
      SubItems.Add(SearchList[3].Strings[n]);
      SubItems.Add(SearchList[5].Strings[n]);
      SubItems.Add(SearchList[1].Strings[n]);
      SubItems.Add(S);
      SubItems.Add(AddZero(IntToStr(i), 6));
      SubItems.Add(S2);
    end;

Uwe Raabe 8. Jan 2017 16:49

AW: Problem mit DELETE ???
 
Zitat:

Zitat von markus5766h (Beitrag 1358401)
das Delete bezieht sich dann auf die TListView und nicht auf den String . . .

Genauer: auf das durch Add zurückgegebene
Delphi-Quellcode:
TListItem
, was ein
Delphi-Quellcode:
Delete
bereitstellt. Schöner und weniger anfällig für solche Fehler wäre aber:

Delphi-Quellcode:
var
  newItem: TListItem;
...
  newItem := MediaListView.Items.Add;
  newItem.Caption := SearchList[2].Strings[n];
  newItem.SubItems.Add(SearchList[3].Strings[n]);
  newItem.SubItems.Add(SearchList[5].Strings[n]);
  newItem.SubItems.Add(SearchList[1].Strings[n]);
  newItem.SubItems.Add(S);
  newItem.SubItems.Add(AddZero(IntToStr(i), 6));
  newItem.SubItems.Add(S2);

Fritzew 8. Jan 2017 16:53

AW: Problem mit DELETE ???
 
Mach Dir selber einen Gefallen und gewöhne Dir das with ab.

Gerade in grossen Projekten kannst Du damit fürchterlich auf die Nase fallen bei Änderungen in den
darunterlegenden Klassen. Das Problem ist das der Code wahrscheinlich trotzdem kompiliert aber dann erst beim Kunden knallt.

Wir machen so etwas grundsätzlich nur noch mit hilfsvariablen.

also ungefähr:

Delphi-Quellcode:
var
  litem : TlistItem;
begin
litem := MediaListView.Items.Add;
    begin
      litem.Caption := SearchList[2].Strings[n];
      litem.SubItems.Add(SearchList[3].Strings[n]);
      litem.SubItems.Add(SearchList[5].Strings[n]);
      litem.SubItems.Add(SearchList[1].Strings[n]);
      litem.SubItems.Add(S);
      litem.SubItems.Add(AddZero(IntToStr(i), 6));
      litem.SubItems.Add(S2);
    end;
end,

markus5766h 8. Jan 2017 17:05

AW: Problem mit DELETE ???
 
danke für die Tipps :thumb:

haentschman 9. Jan 2017 05:31

AW: Problem mit DELETE ???
 
Moin...:P
...wenn wir schon bei Tipps sind. :zwinker:
Delphi-Quellcode:
var
  n, l, l2, i, r, sn : Byte;
  p : Integer;
  S : String;
  S2 : String;
  IndexList : TStringlist;
... was hindert dich eigentlich daran den Variablen sprechende Namen zu geben? Nix ist schlimmer als bei fremden Code die Zuordnungen der Variablen zu erkennen. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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