AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListBox Delimiter

Ein Thema von newuser01 · begonnen am 22. Aug 2007 · letzter Beitrag vom 26. Aug 2007
Antwort Antwort
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#1

ListBox Delimiter

  Alt 22. Aug 2007, 16:28
Folgendes Problem:



Delphi-Quellcode:
procedure Tfrm_main.ListBox1Click(Sender: TObject);
var
  i: Integer;
  sl:TStringList;
begin

//Ich klicke einen Eintrag in der ListBox an und übergebe diesen als Delimitertext zb. "a=Heute ist ein heißer Sommertag"

sl := TStringList.Create;

for i := 0 to sl.Count - 1 do
begin
  if sl.Selected[i] = true then
  begin
    sl.DelimitedText := ListBox1.Items.Strings[i];
  end;
end;

//jetzt übergebe ich das Delimiter-Zeichen
sl.CommaText := 'a='; // sl.Delimiter := 'a=' funktioniert leider nicht es kommt die Fehlermeldung "incompatible char string"

//und jetzt soll alles was nach dem Delimiterzeichen 'a=' steht an Edit1.Text übergeben werden
for i := 0 to sl.Count - 1 do
begin
Edit1.Text := sl[i];
end;

end;

//in Edit1 müsste also stehen "Heute ist ein heißer Sommertag"


Das ganze funktioniert natürlich nicht aber vielleicht könnt ihr ja weiterhelfen
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ListBox Delimiter

  Alt 22. Aug 2007, 17:03
Hallo Holger,

dein Beispiel zielt ja eher auf Name-Value-Paare, das geht auch einfacher:

Delphi-Quellcode:
procedure Tfrm_main.ListBoxClick(Sender: TObject);
begin
  with Sender as TListBox do
    ShowMessage(Items.ValueFromIndex[ItemIndex]);
end;
Strings.DelimitedText verwendest du, wenn du eine Werteliste in Form eines Strings 'a,b,"c,d",e' in einzelne Strings zerlegen möchtest. Wenn Quote der QuoteChar und Comma der Delimiter ist, dann kannst du gleich CommaText verwenden.

Grüße vom marabu
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#3

Re: ListBox Delimiter

  Alt 22. Aug 2007, 17:05
habs gelöst

Delphi-Quellcode:
procedure Tfrm_main.ListBox1Click(Sender: TObject);
var
  i: Integer;
  sl:TStringList;
  s:String;
begin

sl := TStringList.Create;
sl.Delimiter := '=';
for i := 0 to sl.Count - 1 do
begin
  if sl.Selected[i] = true then
  begin
    sl.DelimitedText := ListBox1.Items.Strings[i];
  end;
end;


for i := 1 to sl.Count - 1 do
begin
s := s + ' ' + sl.Strings[i];
end;

Edit1.Text := s;

end;

//in Edit1 steht nun "Heute ist ein heißer Sommertag" :mrgreen:
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: ListBox Delimiter

  Alt 22. Aug 2007, 18:14
Ich muss zugeben, dass ich sehr beeindruckt bin: Mehr als ein halbes Dutzend "Fehler".

Hast du schon versucht den Code zu übersetzen?

Nachdenkliche Grüße
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#5

Re: ListBox Delimiter

  Alt 26. Aug 2007, 13:28
Du hast Recht schande über mich


Delphi-Quellcode:

procedure Tfrm_main.ListBox1Click(Sender: TObject);
var
  i: Integer;
  sl:TStringList;
  s:String;
begin

sl := TStringList.Create;
sl.Delimiter := '=';

for i := 0 to ListBox1.Count - 1 do
begin
  if ListBox1.Selected[i] = true then
  begin
    sl.DelimitedText := ListBox1.Items.Strings[i];
  end;
end;


for i := 0 to sl.Count - 1 do
begin
s := s + ' ' + sl.Strings[i];
end;

Edit1.Text := s;

end;

//in Edit1 steht nun "Heute ist ein heißer Sommertag" :mrgreen:

so besser ?
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: ListBox Delimiter

  Alt 26. Aug 2007, 14:54
Hallo Holger,

Schande über den, der aufgehört hat zu lernen, weil er alles zu wissen glaubt.

Hast du meinen Code aus Beitrag #2 ausprobiert? Aus deinen Kommentaren habe ich geschlossen, dass er dein Problem löst - und zwar so wie es von den VCL-Machern vorgesehen ist. Natürlich kannst du das gewünschte Ergebnis auch anders erreichen.

Vielleicht hilft es dir, wenn ich deinen Code kommentiere?

Delphi-Quellcode:
procedure Tfrm_main.ListBox1Click(Sender: TObject);
var
  i: Integer;
  // Du deklarierst sl als TStringList, obwohl du keine speziellen Eigenschaften
  // von TStringList verwendest. TStrings wäre dann korrekter.
  sl: TStringList;
  s: String;
begin
  // du legst eine lokale Variable auf dem Heap an und gibst
  // ihren Speicher beim Verlassen der Methode nicht wieder frei
  sl := TStringList.Create;
  // Du willst einen String 'a=Heute ist ein' am Gleichheitszeichen zerlegen,
  // aber eine Leerstelle ist durch eine Implementierungsschwäche des
  // internen Parsers auch ein Delimiter, wenn keine Quotes verwendet werden.
  sl.Delimiter := '=';

  // Du iterierst über die Items der ListBox, obwohl ItemIndex
  // das angeklickte Item benennt
  for i := 0 to ListBox1.Count - 1 do
  begin
    // Das IF-Statement verlangt einen Boolean-Ausdruck und
    // Selected[i] ist ein solcher. Du verkomplizierst diesen
    // durch einen Vergleich mit einer Boolean-Konstante, welche
    // zudem noch implementationsbedingte Probleme mitbringt.
    if ListBox1.Selected[i] = true then
    begin
      // Weil Strings[] die default property der ListBox.Items ist,
      // genügt die Schreibweise ListBox1.Items[i] - liest sich auch besser.
      sl.DelimitedText := ListBox1.Items.Strings[i];
    end;
  end;

  // Du iterierst über eine StringList, welche bei Index 0
  // den Wert vor dem Gleichheitszeichen aufweist und auch nur dann,
  // wenn dieser Wert nicht durch eingeschlossene Leerzeichen mehrfach
  // zerlegt wurde.
  for i := 0 to sl.Count - 1 do
  begin
    // du verkettest alle Strings und ersetzt effektiv alle Delmiter
    // (Gleichheitszeichen und Leerzeichen) durch jeweils ein Leerzeichen.
    // Dabei steht in s ein zufälliger Inhalt, weil du die lokale Variable
    // nicht initialisiert hast.
    s := s + ' ' + sl.Strings[i];
  end;

  Edit1.Text := s;
  // Ausgehend von 'a=Heute ist ein' dürfte jetzt '(zufallsinhalt) a Heute ist ein'
  // in Edit1 angezeigt werden. Selbst wenn der Zufallsinhalt ein Leerstring sein sollte,
  // ist das nicht das, was du eigentlich erwarten solltest.

end;
Edit1 und ListBox1 sind keine Objektnamen - die hat die IDE nur als Platzhalter generiert und du solltest sie abändern.

Übrigens hast du in deinem Profil D5 stehen, aber D5 kennt die Eigenschaft DelimitedText noch nicht.

Freundliche Grüße
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#7

Re: ListBox Delimiter

  Alt 26. Aug 2007, 20:09
Zitat:
Übrigens hast du in deinem Profil D5 stehen, aber D5 kennt die Eigenschaft DelimitedText noch nicht
ich benutze zur Zeit TurboDelphi

Zitat:
Schande über den, der aufgehört hat zu lernen, weil er alles zu wissen glaubt
ich habe nicht aufgehört zu lernen und ich glaube auch nicht alles zu wissen sonst würde ich bestimmt nicht fragen


Zitat:
Edit1 und ListBox1 sind keine Objektnamen - die hat die IDE nur als Platzhalter generiert und du solltest sie abändern.
bei mir steht es dann immer so in etwa.
Delphi-Quellcode:


//so
slTmp1.DelimitedText := lb_Fragen.Items.Strings[i1];

//oder so
e_Fragen.Text := s;


Ich könnte ja den gesamten Codeabschnitt meines Projektes der bei mir funktioniert Posten, aber ich glaube dann bekommst du graue Haare und erschießt mich
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: ListBox Delimiter

  Alt 26. Aug 2007, 21:03
Hallo Holger,

Zitat von newuser01:
... Ich könnte ja den gesamten Codeabschnitt meines Projektes der bei mir funktioniert Posten ...
du hast alles fest im Griff, wie mir scheint. Da du dich selbst in deiner Signatur als Hobby-Programmierer bezeichnest, mag das Ergebnis und nicht der Weg dorthin dich zufrieden stellen.

Zitat von newuser01:
... aber ich glaube dann bekommst du graue Haare und erschießt mich
Deine Sorge um meine Haare ist rührend, aber wir gehen schon lange getrennte Wege. Und obwohl ich an der Waffe ausgebildet wurde: Ich bin der Worte mächtig - das reicht in den meisten Fällen.

Viel Spaß noch mit deinem Projekt.

Gute Nacht
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#9

Re: ListBox Delimiter

  Alt 26. Aug 2007, 22:40
Zitat:
du hast alles fest im Griff, wie mir scheint
Nein ! nicht alles, aber es wird schon noch

Zitat:
mag das Ergebnis und nicht der Weg dorthin dich zufrieden stellen
Genau in erster Linie zählt für mich das Ergebnis. Mir ist schon klar das mein Code in meinen Projekten hier und da mal unübersichtlich ist. Mir ist auch klar das man das ganze um einiges verbessern könnte, da geb ich dir schon Recht. Ich Löse die Probleme eigentlich immer so wie sie mir gerade einfallen hauptsache es funktioniert. Ich kann ja nicht bei jeder Sache hier immer wieder Fragen stellen. Ich Programmiere die meisten sachen frei aus dem Kopf 80% zumindest und wenn ich längere Zeit nichts mache muss ich auch mal nachschlagen. Ich nehme auch gerne Ratschläge von den leuten hier an selbstverständlich auch deine, deswegen kann ich auch die Eußerung "ich scheine alles zu wissen" nicht verstehen.


Zitat:
Deine Sorge um meine Haare ist rührend, aber wir gehen schon lange getrennte Wege
das kenn ich woher
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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