| Autor |
Beitrag |
DelphiN00b
      
Beiträge: 27
Win 95, Win98, Win NT, Win 2k, Win XP
D6 Pers, D7 Enterprise
|
Verfasst: Sa 15.11.03 01:41
Hallo,
ich habe ein mehr oder weniger kleines Problem; Ich Programmiere zur Zeit einen Chat Client und möchte das wenn ein bestimmter user den Raum betritt das ihm "Superuser Rechte" verliehen werden. Ich hab das mal gemacht, aber das funzt irgendwie nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); var lpos: integer; htemp: variant; begin hTemp:=Webbrowser1.Document; lpos:=pos('CHAT:NEW',hTemp.Body.OuterHTM); If lpos>1 then Webbrowser.Navigate(''); end; |
Der Code geht aber nicht so richtig.
pLz hLp
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Ex0rzist
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Sa 15.11.03 02:36
Hallo,
hier der richtige Code:
Delphi-Quelltext 1:
| If lpos > 0 then Webbrowser.Navigate(''); |
Du hast in deinem Code geprüft, ob der Text ab der zweiten Stelle vorkommt. Ich gehe mal davon aus, dass du aber ab der ersten Stelle suchen wolltest.
Also entweder auf lpos > 0 oder lpos >= 1 prüfen.
Jetzt müsste es klappen.
_________________ If accidentally read, induce vomitting.
|
|
DelphiN00b 
      
Beiträge: 27
Win 95, Win98, Win NT, Win 2k, Win XP
D6 Pers, D7 Enterprise
|
Verfasst: Sa 15.11.03 11:09
Daran liegt es nicht, denn 'CHAT:NEW' hat mehr als einen Buchstaben. Also ist es egal ob ich lpos > 0 oder lpos > 1 schreibe.
Man könnte um genau zu sein auch lpos = 8 schreiben.
Mein Problem wurde nicht gelöst. Aber es kann ja sein das mein kompletter source falsch ist?.
|
|
Ex0rzist
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Sa 15.11.03 15:04
Glaube mir bitte, dass es nicht so ist, wie du gesagt hast.
Wenn du schreibst lpos = 8, dann bedeutet das, dass der gesuchte String an 9. Stelle des zu durchsuchenden Strings beginnt. Dabei spielt es überhaupt keine Rolle, wie lang das Wort ist.
Ich empfehle dir, die Funktion Pos in der Hilfe nachzuschlagen oder einfach mal meinen Ratschlag auszuprobieren.
|
|
DelphiN00b 
      
Beiträge: 27
Win 95, Win98, Win NT, Win 2k, Win XP
D6 Pers, D7 Enterprise
|
Verfasst: So 16.11.03 14:14
Ich habe deinen Ratschlag ausprobiert.
Aber ich habe einen anderen Fehler: Wenn ein user den Raum betritt, wird diesem User immer wieder SU verliehen.
Das ist mein Problem! 
|
|
Ex0rzist
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: So 16.11.03 14:25
Der Code, den ich dir gegeben habe, hat keinen Fehler.
Du musst dein Problem und dein Ziel nur etwas ausführlicher beschreiben.
Mit "funzt irgendwie nicht" kann ich leider nichts anfangen.
Wenn ich das richtig verstehe, willst du einem User besondere Rechte geben, der "CHAT:NEW" eingegeben hat.
Du könntest mal einen Breakpoint in der Prozedur setzen und schauen warum dem User Superrechte verliehen werden. Also: Warum ist lpos > 0, selbst wenn niemals "CHAT:NEW" eingegeben wurde.
Kann es sein, dass hTemp.Body.OuterHTM den gesamten bisherigen Chatverlauf enthält oder was ist das?
|
|
DelphiN00b 
      
Beiträge: 27
Win 95, Win98, Win NT, Win 2k, Win XP
D6 Pers, D7 Enterprise
|
Verfasst: Mo 17.11.03 16:18
Ahhhh, jetzt kommen wir der Sache schon näher.
Das Prob ist, dass in hTemp.Body.OuterHTM der gesamte Chatverlauf gespeichert ist. Mich interessiert aber nur die aktuelle Zeile im Chat. Wie geht daS?
Ich weiß nicht wie ich das Erklären soll, hoffe das ist Verständlich. 
|
|
Ex0rzist
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Mo 17.11.03 18:05
Das kannst du mit Hilfe eines Memos machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var temp: Variant; begin temp := WebBrowser1.Document; Memo1.Text := temp.body.outerHTML; Showmessage(Memo1.Lines[Memo1.Lines.Count-1]); end; |
|
|
DelphiN00b 
      
Beiträge: 27
Win 95, Win98, Win NT, Win 2k, Win XP
D6 Pers, D7 Enterprise
|
Verfasst: Mo 17.11.03 19:30
Dein Source hat nur ein Fehler: Es wird nicht die gesamte letzte Chatzeile angezeigt sonder nur der Anfang einer Zeile.
|
|
Ex0rzist
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: Mo 17.11.03 19:50
So langsam verliere ich meine Geduld.
Ich versuche dir zu helfen und du hast nichts besseres zu tun, als mir zu erklären, was ich für Fehler mache.
Der Code, den ich dir gegeben habe, gibt bei mir (ich habe es getestet) die GESAMTE letzte Zeile des Memos aus.
Wenn du da jetzt eine mehrzeilige Nachricht herausfiltern willst, dann musst du dir überlegen, wie du das isolierst. Ich weiss nicht, wie dein Chat aufgebaut ist. Wenn du mir aber jetzt erzählst, dass ich Fehler mache, die ich aber gar nicht vermeiden kann, da ich nichts Genaueres über DEIN Projekt weiss, dann ist meine Geduld langsam aber sicher erschöpft.
Du hast gefragt, wie du die letzte Zeile herausfinden kannst. Das habe ich dir gezeigt. Und glaube mir, dazu bedarf es keines Profiwissens.
|
|