Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Delete strings in ListBox (https://www.delphipraxis.net/103263-delete-strings-listbox.html)

taktaky 13. Nov 2007 13:23


Delete strings in ListBox
 
Hallo,

ich habe eine List in ListBox1 und wollte alle letze 2 Strings löschen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, j : Integer;
begin
for i := ListBox1.Items.Count-1 downto ListBox1.Items.Count-2 do
Delete(ListBox1.Items[i]);
end;

// ich möchte also nicht die Zeilen löschen sondern die letzte 2 Strings in jede Zeile in ListBox löschen

Ich muss also auch in jede Zeile suchen

Luckie 13. Nov 2007 13:27

Re: Delete strings in ListBox
 
Warum eine schleife, wenn du nur die letzten beiden Einträge löschen willst? Und Delete löschte Zeichen aus einer Zeichenkette. Wenn du nur den Text löschen möchtes, dann weise den Items eine leere Zeichenkette zu.

alzaimar 13. Nov 2007 13:27

Re: Delete strings in ListBox
 
Die Eigenschaft 'Items' der Listbox ist ein TStrings-Objekt. Diese Klasse stellt die richtigen Methoden bereit. Schau mal in der Delphi-Hilfe unter TStrings oder der Eigenschaft 'Items' einer Listbox.

Nuclear-Ping 13. Nov 2007 13:27

Re: Delete strings in ListBox
 
Du kannst nicht mit den Zeilen der Listbox direkt arbeiten, bzw. nicht an Delete übergeben, sondern musst die erst in nem String zwischenspeichern, den bearbeiten und dann der ListBox wieder zuweisen.

Grundlagen wissen solltest du ja inzwischen schon genug haben und auch wissen, wie man die Delphi Hilfe benutzt. ;)

[edit]
Achso, verlesen. Dachte du wolltest die letzten zwei Zeichen der Strings löschen ...
[/edit]

leddl 13. Nov 2007 13:29

Re: Delete strings in ListBox
 
Mal davon abgesehen, dass der Quellcode wieder mal totaler Quatsch ist:
Zitat:

Zitat von taktaky
// ich möchte also nicht die Zeilen löschen sondern die letzte 2 Strings in jede Zeile in ListBox löschen

In jeder Zeile befindet sich nur ein einziger String... :roll:
Zitat:

Zitat von taktaky
Ich muss also auch in jede Zeile suchen

Dann schau dir deinen Quellcode nochmal genau an, das tust du nicht mal ansatzweise... :wall:

DeddyH 13. Nov 2007 13:56

Re: Delete strings in ListBox
 
Was willst Du löschen? Die letzten beiden Zeilen oder jeweils die letzten beiden Zeichen je Zeile?

taktaky 13. Nov 2007 17:32

Re: Delete strings in ListBox
 
natürlich die letzte 2 Zeichen je Zeile

Ich versuche nun mit Length, pos

mkinzler 13. Nov 2007 17:34

Re: Delete strings in ListBox
 
setLength()

Progman 13. Nov 2007 17:35

Re: Delete strings in ListBox
 
Delete(Str, Length(str)-1, 2);

DeddyH 13. Nov 2007 17:41

Re: Delete strings in ListBox
 
Nur der Vollständigkeit halber:
Delphi-Quellcode:
str := Copy(str,1,Length(str) - 2);

taktaky 13. Nov 2007 18:28

Re: Delete strings in ListBox
 
Zitat:

Zitat von DeddyH
Nur der Vollständigkeit halber:
Delphi-Quellcode:
str := Copy(str,1,Length(str) - 2);

Ich will löschen und nicht kopieren
Wo ist ListBox1?

leddl 13. Nov 2007 18:30

Re: Delete strings in ListBox
 
Zitat:

Zitat von taktaky
Ich will löschen und nicht kopieren
Wo ist ListBox1?

Zeig doch endlich mal etwas Eigeninitiative :roll:

DeddyH 13. Nov 2007 18:31

Re: Delete strings in ListBox
 
Erst denken, dann posten. Übersetz meinen Code mal ins Deutsche: "Der neue String setzt sich aus einer Kopie des alten abzüglich der letzten 2 Zeichen zusammen". Nun klar? Und die Variable str hab ich einfach frech von meinem Vorposter übernommen.

taktaky 13. Nov 2007 19:23

Re: Delete strings in ListBox
 
Zitat:

Zitat von leddl
Zeig doch endlich mal etwas Eigeninitiative :roll:

Beispiel :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, k : Integer;
dateiname : String;
begin
for i := 0 to ListBox1.Items.Count-1 do
dateiname := ListBox1.Items[i];
k := length(dateiname);
if k > 5 then
// ab 6. Zeichen sollen gelöscht werden
<.. hier soll weiter ...>

end;

end.

mkinzler 13. Nov 2007 19:26

Re: Delete strings in ListBox
 
Hier kannst du jetzt sämtliche Alternativen von oben anwenden z.B.

Delphi-Quellcode:
setLength( dateiname, 5);

Progman 13. Nov 2007 19:26

Re: Delete strings in ListBox
 
Delphi-Quellcode:
if k > 5 then Delete(k,6,Length(k)-5);

Jelly 13. Nov 2007 19:28

Re: Delete strings in ListBox
 
Wie wärs mit
Delphi-Quellcode:
listbox1.items[i] := copy(listbox1.items[i],1,5) ;
Bei den ganzen copy-Beispielen war das aber eigentlich nicht schwer zu erraten, oder :gruebel:

DeddyH 13. Nov 2007 19:32

Re: Delete strings in ListBox
 
Er will doch löschen und nicht kopieren :mrgreen:

taktaky 13. Nov 2007 19:36

Re: Delete strings in ListBox
 
Zitat:

Zitat von Progman
Delphi-Quellcode:
if k > 5 then Delete(k,6,Length(k)-5);

Incommpatible Typ !

Phoenix 13. Nov 2007 19:40

Re: Delete strings in ListBox
 
:wall: Schonmal was von Denken gehört? Das ist das, was in den grauen Zellen zwischen den Ohren passieren sollte.

taktaky 13. Nov 2007 19:43

Re: Delete strings in ListBox
 
Zitat:

Zitat von Jelly
Wie wärs mit
Delphi-Quellcode:
listbox1.items[i] := copy(listbox1.items[i],1,5) ;

Mit dem Form geht
Delphi-Quellcode:
listbox2.items[i] := copy(listbox1.items[i],1,5) ;
[/quote]
aber ich möchte von rechts nach links kopieren
ich habe so versucht :
Delphi-Quellcode:
for i := ListBox1.Items.Count-1 to 0 do
listbox2.items[i] := copy(listbox1.items[i],1,5) ; // passiert leider nichts

Jelly 13. Nov 2007 19:44

Re: Delete strings in ListBox
 
Taktaky,

nimm mal Sebastian's Tipp ernst. Denken ist hier ausdrücklich erlaubt, gell :wink:

DeddyH 13. Nov 2007 19:45

Re: Delete strings in ListBox
 
Gib mal ein Vorher-Nachher-Beispiel, sonst wird das eh wieder nix.

mkinzler 13. Nov 2007 19:47

Re: Delete strings in ListBox
 
Du wolltest die ersten x Zeichen nicht die letzten!
Delphi-Quellcode:
Delete( s, Length(s)-<Länge>, <Länge>);

DeddyH 13. Nov 2007 19:48

Re: Delete strings in ListBox
 
Erst will er den String löschen, dann die letzten beiden Zeichen, jetzt von rechts nach links (was immer damit gemeint ist)... ohne Beispiel poste ich in diesem Thread nichts mehr, das ist doch keine Raterunde hier.

mkinzler 13. Nov 2007 19:50

Re: Delete strings in ListBox
 
Stimmt er könnte meinen vopn rechts her oder den String umdrehen. Vielleicht will er auch was ganz anderes :gruebel:

taktaky 13. Nov 2007 20:06

Re: Delete strings in ListBox
 
Ich wundere mich, dass meine Frage für einige immer noch nicht klar ist :wall:

in die Listbox habe ich eine List. Die Zeilen sind nicht gleich lang

Ich möchte einfach 2 oder 3 Zeichen von rechts nach links löschen (d.h. die letzte 3 Zeichen löschen)

Mehr nicht
Beispiel :
Zeile1
Zeilllle2
Zeillllllle3
Zeillllllllllle4

Alles was Fett ist soll weg :mrgreen:

DeddyH 13. Nov 2007 20:07

Re: Delete strings in ListBox
 
Zitat:

Zitat von Jelly
Taktaky,

nimm mal Sebastian's Tipp ernst. Denken ist hier ausdrücklich erlaubt, gell ;)

Also manchmal möchte ich schon Mäuschen spielen :mrgreen: (wollte zwar nicht mehr posten aber SCNR)

DeddyH 13. Nov 2007 20:08

Re: Delete strings in ListBox
 
2 oder 3 Zeichen? Da wunderst Du Dich, dass das nicht klar ist? :wall:

mkinzler 13. Nov 2007 20:09

Re: Delete strings in ListBox
 
Und was ist das Problem? Oben wurden dir doch mehrere Lösungen für dein Problem (Delete, setLength, Copy). was gefällt dir an den Lösungen nicht?

DeddyH 13. Nov 2007 20:13

Re: Delete strings in ListBox
 
@taktaky: ein paar Fragen: was macht die Funktion Copy, was die Funktion Length und wofür gibt es Blöcke mit begin end?

leddl 13. Nov 2007 20:13

Re: Delete strings in ListBox
 
Zitat:

Zitat von mkinzler
was gefällt dir an den Lösungen nicht?

Dass er nicht den komplett fertigen Quelltext zum Kopieren bekommt :zwinker:

DeddyH 13. Nov 2007 20:18

Re: Delete strings in ListBox
 
Der Verdacht drängt sich auf.

marabu 13. Nov 2007 20:44

Re: Delete strings in ListBox
 
Hallo taktaky,

n < 0 entfernt die Zeichen am Ende jedes Strings:

Delphi-Quellcode:
procedure TruncateStrings(s: TStrings; n: Integer);
var
  i: Integer;
begin
  if n <> 0 then
    for i := 0 to Pred(s.Count) do
      if n < 0
        then s[i] := Copy(s[i], 1, Length(s[i]) + n)
        else s[i] := Copy(s[i], n + 1, MaxInt);
end;
Gute Nacht

Jelly 13. Nov 2007 21:13

Re: Delete strings in ListBox
 
Was denn nun... 2 Zeichen. 3 Zeichen??? werdens morgen 6 :wall:

Nocheinmal ganz ausdrücklich für dich: Es wurden dir hier einige brauchbare Lösungen genannt. Jetzt schalte einmal bitte die Gewebemasse zwischen deinen beiden Trommelfellen kurz ein, und denk mal über die funktionen Copy, Delete und Length nach, was die machen. Wenn du das nicht weisst, dann schau in die OH von deinem Delphi. So jedenfalls kommen wir auf keinen grünen Zweig.

Ist das denn so schwer zu kapieren :evil:

taktaky 13. Nov 2007 21:35

Re: Delete strings in ListBox
 
Die lösung ist nicht mehr als eine Zeile aber die Leute schreiben mir nun Funktionen
Wer weiß, vielleicht kommt einer mit Vorschlag mit einem Package, die letzte 2 Zeichen löscht :mrgreen:

taktaky 13. Nov 2007 22:03

Re: Delete strings in ListBox
 
Zitat:

Zitat von Jelly
Was denn nun... 2 Zeichen. 3 Zeichen??? werdens morgen 6 :wall:

2, 3 oder 4 ist egal, wichtig ist von rechts nach links kopieren
so wird zeichen Zeichen von links nach rechts kopiert :
Code:
...
for i:= 0 to ListBox1.Items.Count-1 do
listbox2.items[i] := copy(listbox1.items[i],1,3)

mkinzler 13. Nov 2007 22:07

Re: Delete strings in ListBox
 
Hat es aber ziemlich lang gedauert

MCXSC 13. Nov 2007 22:11

Re: Delete strings in ListBox
 
Zitat:

Zitat von taktaky
Die lösung ist nicht mehr als eine Zeile aber die Leute schreiben mir nun Funktionen
Wer weiß, vielleicht kommt einer mit Vorschlag mit einem Package, die letzte 2 Zeichen löscht :mrgreen:

Vielleicht kommt auch mal jemand, der das Teil hier closed...

Delphi-Quellcode:
String := Delete(String, Length(String)-<Länge>, <Länge>);
Ist das nicht eine Zeile?

Zitat:

Zitat von taktaky
2, 3 oder 4 ist egal, wichtig ist von rechts nach links kopieren
so wird zeichen Zeichen von links nach rechts kopiert

Link nach rechts? Rechts nach links? Was denn nun? Und wenn du es weißt, wieso fragst du dann?

Wieso hast du nun eigentlich plötzlich 2 Listboxen?

Nuclear-Ping 13. Nov 2007 23:11

Re: Delete strings in ListBox
 
Mehrzeilige Schleifen sollten (ausser repeat-until) in begin-end eingeschlossen werden.

[edit]
Oh sorry, garnicht gesehen, dass das schonwieder 3 Seiten geworden sind ... :mrgreen:
[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr.
Seite 1 von 2  1 2      

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