Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Wörter aus einem String in eine Listbox (https://www.delphipraxis.net/3293-alle-woerter-aus-einem-string-eine-listbox.html)

Pseudemys Nelsoni 5. Mär 2003 11:15


Alle Wörter aus einem String in eine Listbox
 
moin,

"ufc_user = #tiberiansun :ufc_user @silent @nick32 @nick4 @nick"

wie könnt ich alle nicks nach dem ":" in eine listbox packen? es können beliebig viele nicks sein und beliebig lang

Hansa 5. Mär 2003 12:19

Wie das geht? Mit der Holzhammermethode. :wall: Mit Strings mache ich immer kurzen Prozeß. :mrgreen: Ist sichergestellt, daß ein : vorhanden ist geht das ungefähr so :
Code:
repeat
  delete (st,1,1)
until st[1] = ':',  // jetzt nur noch Nicknamen
delete (st,1,);     // auch : löschen
repeat
  ListBox.Items.Add (copy (st,1,pos (' ',st)); // Nick in Box
  while st [1] <> ' ' do             // Nick aus st löschen    
    delete (st,1,1)
  delete (st,1,1);                   // führendes Leerzeichen löschen
until st ='';
Ist aber nicht getestet und muß eventuell noch verfeinert werden! Auf diesem Wege sollte es aber gehen.

Pseudemys Nelsoni 5. Mär 2003 12:37

danke das probier ich mal ;)

gruss mario

Pseudemys Nelsoni 5. Mär 2003 14:04

hm hab das versucht:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, zeichen, nick: string;
begin
  s := acontent;
  repeat
    delete(s, 1, 1)
  until s[1] = ':';
  delete(s, 1, 1);
  repeat
    zeichen := Copy(s, 1, 1);
    nick := nick + zeichen;
    while s[1] <> ' ' do
    delete(s, 1, 1);
  until s = ' ';
end;
aber irgendwie passiert gar nichts und das ganze programm ist wie "abgestürzt", also nichts reagiert mehr

woran liegt das?

gruss mario

janjan 5. Mär 2003 14:09

Änder mal
Delphi-Quellcode:
until s = ' ';
in
Delphi-Quellcode:
until s = '';

Hansa 5. Mär 2003 14:10

Endlosschleife, hab mir das schon gedacht. Solche Sachen aus dem Kopf heraus aufs Papier zu bringen, ohne Fehler geht meistens schief. :mrgreen: Tippe auf die zweite REPEAT. Das Wort Debugger schon mal gehört, oder ShowMessage :?: :?: Muß leider weg.....

Pseudemys Nelsoni 5. Mär 2003 15:43

hab nurn geändert, sieht so aus:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, zeichen, nick: string;
begin
  s := acontent;
  repeat
    delete(s, 1, 1)
  until s[1] = ':';
  delete(s, 1, 1);
  repeat
    zeichen := Copy(s, 1, 1);
    nick := nick + zeichen;
    while s[1] <> ' ' do
    delete(s, 1, 1);
  until s = '';
end;
funzt aber noch immer nicht das prog friert ein
es liegt 100% an dem code, weil wenn ich den lösche klappts

ist doch alles richtig oder nicht?

gruss silent

Hansa 5. Mär 2003 17:54

Aha, Dein Quelltext nähert sich zumindest meinem an.

Zitat:

Zitat von silent
zeichen := Copy (s,1,1)

Erklär mir mal, was Du damit bezweckst :?:

Zitat:

Zitat von silent

zeichen := Copy (s,1,1)
while s[1] <> ' ' do
delete(s, 1, 1);

Habe Dir doch gesagt, daß es nicht getestet ist. Überlege mal, was da passiert.

Pseudemys Nelsoni 5. Mär 2003 18:30

keine ahnung wieso das falsch ist.

ich hatte 3 strings variablen deklariert, eine(zeichen) die das zeichen enthält das kopiert wird, eine(nick) die jedes einzelne zeichen von "zeichen" aufnimmt und eine(s) die den ganzen string enthält...

aber was ist falsch dran? hatte das ein wenig umgeändert weil dein bespiel bei mir nicht klappte :(

kannst du mir sagen was falsch war(ist)?

gruss mario

Hansa 5. Mär 2003 18:55

Code:
repeat
    zeichen := Copy(s, 1, 1);
    nick := nick + zeichen;
    while s[1] <> ' ' do
    delete(s, 1, 1);
until s = '';
1. Repeat und While Schleifen zu mischen macht alles von der Logik her schwerer verständlich.

2. Was macht deine Variable Zeichen :?: Die ist lokal deklariert und wird nicht benutzt. Doch, sie wird ja doch benutzt, aber Dein Nick nicht. Ja, das meinte ich mit schwer verständlich. Da sieht man mal wie man mit 3 Variablen und 2 Schleifen in die Irre geleitet wird. Deshalb heute nicht mehr. :duck: Nur noch soviel:

Wegen der Lesbarkeit verwende ich auch lieber mehr Variablen als weniger, aber dieses Bsp. ist ein klassischer Fall wie mans nicht machen sollte (meiner Meinung nach).

TIP: Übernehme mein Beispiel 1:1 und setze innerhalb der Repeat und While Schleifen direkt unter das delete (st,1,1) ein
Code:
ShowMessage
Bei mir ist noch ein Fehler, aber der ist schnell gefunden, hoffentlich aber von Dir.

Die While Schleife würde dann so aussehen:
Code:
while s[1] <> ' ' do begin
  delete(s, 1, 1);
  showmessage ('*'+st+'*');
end;
Dann siehst Du genau was passiert. Auch die ** machen einen Sinn, zumindest wenn man mit Lerzeichen hantiert.

Pseudemys Nelsoni 5. Mär 2003 18:58

Zitat:

Was macht deine Variable Zeichen Die ist lokal deklariert und wird nicht benutzt. Doch, sie wird ja doch benutzt, aber Dein Nick nicht
die nick variable sollte den text enthalten, der nachher in die listbox geaddet wird.

ich teste dein code nochmal

danke für die hilfe ;)

gruss mario

Hansa 5. Mär 2003 19:04

Dann lass Dir den Nick noch vor dem letzten
Code:
end;
anzeigen :!: Im Moment wirst Du aber da wahrscheinlich gar nicht erst ankommen. Offensichtlich stimmt die Ende-Bedingung meiner Schleifen nicht. Und Tschüß.......

Pseudemys Nelsoni 6. Mär 2003 15:34

ich verstehs einfach nicht, bei:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s: string;
begin
  SlAdmin := TStringList.Create;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    Until s[1] = ':';
    Delete(s, 1, 1);
    Repeat
      while s[1] <> ' ' do
        Delete(s, 1, 1);
      Delete(s, 1, 1);
      if s[1] = '!' then
      begin
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        Delete(s, 1, 1);
      end;
    until s = '';
  end;
end;
kommt immer n fehler "zugriffsverletzung auf 3523423" oder so

ist doch alles soweit richtig oder?

gruss mario

Hansa 6. Mär 2003 19:06

Dein Quelltext ist mir zu kompliziert. Damit käme ich nicht weiter. So geht das jetzt, sogar getestet. Mensch, habe mich bestimmt 5mal vertippt bei dem ersten Beispiel, sagt zumindets Delphi.

Code:
procedure TForm1.Button1Click(Sender: TObject);
VAR st : string;
begin
  st := 'ufc_user = #tiberiansun :ufc_user @nick1 @nick2 @nick3 @nick4';
  repeat
    delete (st,1,1)
  until st[1] = ':';  // jetzt nur noch Nicknamen
  delete (st,1,1);     // auch : löschen
  repeat
    ListBox1.Items.Add (copy (st,1,pos (' ',st)-1)); // Nick in Box
    WHILE (st [1] <> ' ') DO
      delete (st,1,1);
    delete (st,1,1);
showmessage (st);
  until st ='';
end;
Lass sowas mal laufen, dann wirst Du merken, daß am Schluß was nicht stimmt. Bei st muß noch ein Zeichen manipuliert werden. Welches :?: Auf diese Spur bringt Dich der Compiler. :mrgreen:

P.S.: ich meine das st am Anfang, nicht, daß Du an den anderen was rumfummelst :!:

Pseudemys Nelsoni 7. Mär 2003 00:07

funzt, danke schön :)

gruss mario

Hansa 7. Mär 2003 00:35

Zitat:

Zitat von silent
funzt, danke schön

Und wieso, bitte sehr ? Erkläre bitte den Haken an der Geschichte! Wo war der Fehler ? Das Thema hat jetzt fast 130 Aufrufe gehabt, oder warst Du das alleine ? Poste am besten mal den ganzen Code. Die Antworten kamen fast alleine von mir.

Pseudemys Nelsoni 7. Mär 2003 01:23

hatte den code extra nicht gepostet, da er unordentlich aussieht und sicher auch zu lang (kürzer krieg ichs halt nicht hin.

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, s2: string;
begin
  SlAdmin := TStringList.Create;
  SlOp := TStringList.Create;
  SlHop := TStringList.Create;
  SlVoice := TStringList.Create;
  SlReg := TStringList.Create;
  SlAdmin.Sorted := true;
  SlOp.Sorted := true;
  SlHop.Sorted := true;
  SlVoice.Sorted := true;
  SlReg.Sorted := true;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    Until s[1] = ':';
    Delete(s, 1, 1);
    Repeat
      if s[1] = '!' then
      begin
        Delete(s, 1, 1);
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '@' then
      begin
        Delete(s, 1, 1);
        SlOp.AddObject(Copy(s, 1, Pos(' ', s)), image12.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '%' then
      begin
        Delete(s, 1, 1);
        SlHop.AddObject(Copy(s, 1, Pos(' ', s)), image14.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if s[1] = '+' then
      begin
        Delete(s, 1, 1);
        SlVoice.AddObject(Copy(s, 1, Pos(' ', s)), image15.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if (s[1] <> '!') OR (s[1] <> '@') OR (s[1] <> '%') OR (s[1] <> '+') then
        begin
          SlReg.AddObject(Copy(s, 1, Pos(' ', s)), image16.Picture.Bitmap);
          i := i + 1;
          label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
        end;
      while s[1] <> ' ' do
        Delete(s, 1, 1);
      Delete(s, 1, 1);
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
  end;
end;
dein code ist da mit drin(sonst würds wohl noch nicht funzen *g*)
musste ihn nur bisschen verlängern für das ganze Op admin hop voice zeug :\

...jo ich weiss "wozu die stringslists", da ich die nicks nach bildern ordne und nicht nach alphabet ging das leider nicht anders(oder doch?) :)

nochmals danke ^^

gruss mario

Pseudemys Nelsoni 7. Mär 2003 17:20

ich glaub ich schaffe das nie sonen dummen chat (und denn noch mit den indy komponenten) fertig zu bekommen :(

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, nick: string;
    i: integer;
begin
   SlAdmin := TStringList.Create;
  SlOp := TStringList.Create;
  SlHop := TStringList.Create;
  SlVoice := TStringList.Create;
  SlReg := TStringList.Create;
  SlAdmin.Sorted := true;
  SlOp.Sorted := true;
  SlHop.Sorted := true;
  SlVoice.Sorted := true;
  SlReg.Sorted := true;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    Until s[1] = ':';
    Delete(s, 1, 1);
    Repeat
      if s[1] = '!' then
      begin
        Delete(s, 1, 1);
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '@' then
      begin
        Delete(s, 1, 1);
        SlOp.AddObject(Copy(s, 1, Pos(' ', s)), image12.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '%' then
      begin
        Delete(s, 1, 1);
        SlHop.AddObject(Copy(s, 1, Pos(' ', s)), image14.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if s[1] = '+' then
      begin
        Delete(s, 1, 1);
        SlVoice.AddObject(Copy(s, 1, Pos(' ', s)), image15.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if (s[1] <> '!') OR (s[1] <> '@') OR (s[1] <> '%') OR (s[1] <> '+') then
        begin
          SlReg.AddObject(Copy(s, 1, Pos(' ', s)), image16.Picture.Bitmap);
          i := i + 1;
          label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
        end;
      while s[1] <> ' ' do
        Delete(s, 1, 1);
      Delete(s, 1, 1);
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
  end; // BIS HIER HIN AUF DAS "ONNAMES" EREIGNIS
  if Copy(s, 14, 2) = '+a' then
  begin
    nick := s;
    delete(nick, 1, 16);
    SlAdmin.AddObject(nick, image13.Picture.Bitmap);
    for i := 0 to SlOP.IndexOf(nick) do
    begin
      if SlOp.IndexOf(nick) > 0 then
      SlOP.Delete(i);
    end;
    for i := 0 to SlHop.IndexOf(nick) do
    begin
      if SlOp.IndexOf(nick) > 0 then
      SlHop.Delete(i);
    end;
    for i := 0 to SlVoice.IndexOf(nick) do
    begin
      if SlOp.IndexOf(nick) > 0 then
      SlVoice.Delete(i);
    end;
    for i := 0 to SlOP.IndexOf(nick) do
    begin
      if SlReg.IndexOf(nick) > 0 then
      SlReg.Delete(i);
    end;
    listbox1.Clear;
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
    end;   // BIS HIER HIN AUF DAS "+a" EREIGNIS
  end;
end;
^^^^^^^^^^^^^^ das ist allein um bei "OnNames" die Nicks aus dem String "= #chan :nick nick2 nick3"(usw) auszulesen und sie in die Stringlists Sladmin, Slop usw einzufügen und von da aus in die Listbox.
ich meine das muss doch auch kürzer gehn für sone kleinigkeit..

gibts nicht irgendwie ne andere lösung? weil dadurch das es soviel ist (da unter soll noch code folgen) komm ich mit dem ganzen nichtmehr klar.
der code der auf das +a reagieren soll funzt z.b nicht richtig.

für jede hilfe dankbar

gruss mario

Hansa 7. Mär 2003 17:52

Das ist viel zu viel, für einen Fehler zu finden. Du mußt das Problem reduzieren und eingrenzen. Ich hab Dir doch gesagt, daß mein Beispeil geht, allerdings nur, sofern mit dem st noch etwas passiert :!:

Code:
 
st := 'ufc_user = #tiberiansun :ufc_user @nick1 @nick2 @nick3 @nick4';
@nick4 ist etwas anders als die anderen drei ! Auch nützt es nix, wenn Du schreist: "Mama, mein Programm geht nicht!" :mrgreen: Wo geht was micht ?

Pseudemys Nelsoni 7. Mär 2003 19:04

Also ich hatte mir das so vorgestellt, das ich bei dem Ereignis "OnRAW"(353(/names)), aus dem String "silent = #tiberiansun :!silent @Benny @Stoja @oXyGeN %sysop %stalin +NewbiLike" die nicks auslese, also alles nach dem ":". Die Nicks mit dem "!" vor dem Nick kommen in die Stringlist "SlAdmin", die mit "@" in die "SlOP"...das gleiche mit hop voice und regulären nicks. Danach kommen die Stringlists in die Listbox, erst admins dann ops dann hops dann voice dann reg.
btw: das erste zeichen jedes nicks muss weg, also der prefix, da ich ein bild stattdessen nehme


^^^^ das ist allein fürs chan joinen (also onnames)


Sagen wir mal jemand setzt den mode "+a", dann muss ich in dem String "#tiberiansun +a silent" gucken obs auch "+a" ist (kann ja auch +o -a etc sein), und schlisslich muss ich das letzte Wort(den nick) rausnehmen, ihn in die Stringlist "SlAdmin" packen und die anderen Stringlists "SlOP, SlHop, SlVoice, SlReg" überprüfen in welcher Stringlist der nick vor dem +a war und ihn daraus löschen. Wenn ich das hab Lösch ich die Listbox1 und füge wieder alle Stringlists in die Listbox1.

ist bisschen viel oder? :(

gruss mario

Hansa 7. Mär 2003 19:23

Zitat:

Zitat von silent
ist bisschen viel oder? :(

Nö. :P Du gehst nur falsch an das Problem ran. Versuche zuerst einmal alle Nicks mit @,! oder was weiß ich, in die Listbox reinzukriegen. :!: Dann ist Dein Programm vorerst auch nur so groß wie meines. Danach kannst Du dann immer noch anhand der Prefixe entscheiden, was gemacht werden muß, im Stile von:
Code:
CASE prefix OF
  '@' : showmessage ('S|OP');
...
END;
Verdammt nochmal, mach in meinem Bsp. ans Ende des Strings noch ein Leerzeichen, und guck, daß Du die Box gefüllt kriegst. :wink: Vorher wird das sonst nie was.

P.S.: Hab mir nochmal Deinen Quelltext angesehen.
Code:
if then else if then else if then else...
ist genau das, was ich gerade mit Case gemeint habe. Lese Dir mal durch, wie das genau geht. Kann es sein, daß Du vorher mal Basic gemacht hast ?

Pseudemys Nelsoni 7. Mär 2003 19:55

jo visual basic 6 einsteiger edition *g*
das problem ist, das ich nie mit case anweisungen gearbeitet hab und nicht weiss wie sie funktionieren

gruss mario :)

Hansa 7. Mär 2003 20:56

Dein Programmierstil hat Dich entlarvt. :mrgreen: Sowas sagt man aber vorher und läßt sich nicht erst erwischen. :lol: In der Hilfe steht ein Beispiel, bei mir allerdings in Englisch. Kannst Du das nicht, die Code-Beispiele sind trotzdem ziemlich eindeutig.

Pseudemys Nelsoni 7. Mär 2003 21:53

ja hätt ichw ohl zugeben solln, aber dann würd ich hier zum tod verurteilt werden <g>

btw: hab die caseanweisungen in der delphi hilfe gelesen, ich weiss nur nicht genau was sie bringen :oops:

gruss mario

Hansa 8. Mär 2003 00:33

Zitat:

Zitat von silent
...aber dann würd ich hier zum tod verurteilt werden

Echt? :shock: Oh je, ist das so gefährlich hier ? Schlimm, schlimm, lesen kann ich Deine Bücher trotzdem nicht.

Pseudemys Nelsoni 8. Mär 2003 01:01

meine bücher? O_o

Pseudemys Nelsoni 8. Mär 2003 16:24

hab das nochmal geändert

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s: string;
begin
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    until s[1] = ':';
    delete(s, 1, 1);
    Repeat
      if s[1] = '!' then
      begin
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        while s[1] <> ' ' do
          delete(s, 1, 1);
        delete(s, 1, 1);
      end;
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
  end;
end;
also erst lösch ich alles bis zum ":", dann das ":" selbst dann will ich prüfen ob das 1 zeichen des wortes ein "!" ist, wenn ja dann will ich den nickin die stringlist SlAdmin tun...und dann die striglist in die listbox....stürzt aber ab, ist das ne endlosschleife?

Das ist für das "!". Ich müsste das ganze auch mit "@" "%" "+" und wenn kein prefix vo dem nick ist machen

gruss silent

Hansa 8. Mär 2003 16:59

Delphi-Quellcode:
    Repeat  // <-- ab hier wirds kritisch
      if s[1] = '!' then <------------------- Endlosschleife
      begin
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        while s[1] <> ' ' do
          delete(s, 1, 1);
        delete(s, 1, 1);
      end;
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
  end;
end;
Zitat:

also erst lösch ich alles bis zum ":", dann das ":"
Genau :!:

Zitat:

Ich müsste das ganze auch mit "@" "%" "+" und wenn kein prefix vo dem nick ist machen
Genau :!: Dann kommt nämlich das Case ins Spiel und dann blickst Du wieder durch. :mrgreen:

Nur : was passiert denn, wenn st[1] <> '!', wird die Repeat Schleife dann jemals beendet :?:

Pseudemys Nelsoni 8. Mär 2003 17:30

dachte eigtnlich schon das sie beendet wird, da "delete(s, 1, 1);
" doch das "!" löscht und beim nächsten durchgang das "if s[1] = '!' then" doch nichtmehr zutrifft oder?

Hansa 8. Mär 2003 17:41

Delphi-Quellcode:
   s := 'HÄ?'
    Repeat  
      if s[1] = '!' begin
...
      end;
    until s = '';
s[1] wird bis zum Tod Deines Rechners wohl oder übel 'H' sein.

Pseudemys Nelsoni 8. Mär 2003 17:56

aber ich lösche doch innerhalb der schleife das erste zeichen von s oder?

Zitat:

s := 'HÄ?'
ich weise "s" ja keinen wert zu, bis auf am anfang "s:= acontent" aber das trifft doch nur 1mal zu :?:

:|

Hansa 8. Mär 2003 18:03

Code:
Repeat  
      if s[1] = '!' begin
Aber nur, wenn das erste Zeichen ein '!'. Uff, Gott sei Dank bin ich von Basic verschont geblieben. :spin:

Pseudemys Nelsoni 8. Mär 2003 19:03

kann ich das ganze auch ohne case anweisungen machen? ich weiss nicht wie ich das sonst machen kann :cry:

Pseudemys Nelsoni 9. Mär 2003 13:52

so funzt es nun:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s: string;
begin
  SlsCreenab;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    until s[1] = ':';
    delete(s, 1, 1);
    Repeat
      if s[1] = '!' then
      begin
        delete(s, 1, 1);
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
      end
      else
      if s[1] = '@' then
      begin
        delete(s, 1, 1);
        SlOp.AddObject(Copy(s, 1, Pos(' ', s)), image12.Picture.Bitmap);
      end
      else
      if s[1] = '%' then
      begin
        delete(s, 1, 1);
        SlHop.AddObject(Copy(s, 1, Pos(' ', s)), image14.Picture.Bitmap);
      end
      else
      if s[1] = '+' then
      begin
        delete(s, 1, 1);
        SlVoice.AddObject(Copy(s, 1, Pos(' ', s)), image15.Picture.Bitmap);
      end
      else
      if (s[1] <> '!') OR (s[1] <> '@') OR (s[1] <> '%') OR (s[1] <> '+') then
      begin
        SlReg.AddObject(Copy(s, 1, Pos(' ', s)), image16.Picture.Bitmap);
      end;
      while s[1] <> ' ' do
        delete(s, 1, 1);
      delete(s, 1, 1);
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.

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