Entwickler-Ecke
Internet / Netzwerk - ICQ-Client in Delphi schreiben - möglich?
LeoLöwe - Sa 02.09.06 19:01
Titel: ICQ-Client in Delphi schreiben - möglich?
Hallo, ich melde mich auch mal wieder...
Aaaaaalso:
Letztens kam uns bei einem lustigen Abend die Idee, einen ICQ-Clienten zu schreiben.
Der soll dann, wenn einer schreibt, auf einem kleinen LCD was anzeigen.
Dann kann man auf das LCD schielen und weiß, ob man nun zu dem Rechner rennen muss oder nicht.
Später soll man dann auch per Plugin LED-Flasher steuern können etc.
Oder anders gesagt: Bei einer eingehenden Nachricht irgendwas auf den LTP/COM-Ports ausgeben lassen kann.
Das LCD läuft wunderbar, ein kleiner ATMEGA 8 wandelt den Text, der per RS232 reinkommt in die Datenpakete für das LCD um. Dann kann man schnell im Hauptprogramm den Text raushauen und der Chip kümmert sich um Timing, Bits, etc.
Nun das Problem: Wie kann ich mein Programm mit dem ICQ-Server verbinden?
Gibt es irgendwo Quellcodes etc. wo ich das abschauen kann?
Hier im Forum hab ich schon was gefunden, leider steht da das die Funktionen nicht mehr gehen sollen.
Bei google hab ich ein ganzes Tutorial gefunden, nur leider kann ich kein russisch :-(
Irgendwie bräuchte ich da mal eure Hilfe...
Danke schonmal! Wäre echt gut wenn mir einer Tipps dazu geben könnte.
Quellcode wäre natürlich am besten, denn ich wüsste jetzt nicht wie ich irgendein Bit an den ICQ Server senden sollte...
Ich hab auch eine Englische Seite dazu gefunden, aber wie gesagt ich weiß nicht wie ich ein "0x67" gen ICQ senden sollte.
Bzw. was ich mit einer wohl ähnlich kryptischen Antwort anfangen sollte
Moderiert von
Christian S.: Topic aus Sonstiges (Delphi) verschoben am Sa 02.09.2006 um 22:34
Martok - Sa 02.09.06 19:12
Gibts schon:
http://www.rejetto.com/&RQ/
Ist aber eingestellt worden, wird jetzt von Russen weiterentwickelt, als Closed Source.
Möglicherweise habt ihr da dann ja ne schöne Codebasis. Wäre schön wenn das als OpenSource weiter gehen würde.
Übrigens, wenn dann baut XTras-Unterstützung ein. Ich möchte nicht immer zum Pool spielen den Client wechseln müssen :mrgreen:
//Martok
EDIT: URL korrigiert
GTA-Place - Sa 02.09.06 19:50
Ansonsten guck dir mal
Indy [
http://www.indyproject.org/] (insbesondere die Demos) an. Damit ist es möglich, einen ICQ-Client zu schreiben.
blaueled - Sa 02.09.06 20:12
Hi,
bau doch ein Plugin für Miranda, dann hast du (fast) sämtliche protokolle abgegessen.
alias5000 - Sa 02.09.06 20:18
Der kann doch schon ICQ... :roll:
LeoLöwe - Sa 02.09.06 22:21
Also aus der Sache mit Indy werde ich nicht schlau...
Aber trotzdem danke für die Tipps. Irgendwie müsste es doch ein Tutorial über ICQ geben... Ich dachte da hätten sich die Entwickler schonmal drum gekümmert.
Werde mal schauen, Miranda hab ich mir schon installiert, die DLL ist auch schon drin (ICQ hat ja das Protokoll umgestellt. Deswegen laufen ja die meisten Entwicklungen nicht mehr)
Also ich melde mich, wenn ich was raus finde.
Werde erstmal schauen ob man einfach mal so so ein Plugin basteln kann.
Wenn nicht - Server hab ich, dann schreib ich mir einfach selber einen Messenger
LeoLöwe - So 03.09.06 10:53
Also nach einer arbeitsreichen Nacht bin ich immer noch nicht weiter gekommen...
Mit Indy kann man offenbar Pakete an den ICQ Server senden, wie auch immer das gehen soll
Das ärgert mich jetzt irgendwie :-(
GTA-Place - So 03.09.06 11:01
Hast du die ICQ-Demo im Demo-Ordner angeguckt?
Xion - So 03.09.06 11:48
sowas find ich nicht, demo ordner hab ich ja, aber nix mit ICQ
LeoLöwe - So 03.09.06 12:14
Ich find die ICQ Demo nicht :-(
Irgendwie bin ich da zu blöde die zu finden
Auf meinem Rechner hab ich schon die alte Indy9 Demo und alles Indy 10 Demos durchgeschaut, mit ICQ finde ich da trotzdem nichts
Kann mal wer die ICQ Demo hochladen? Oder mir sagen wo ich die finde, vielleicht kapier ich das dann auch mal
F34r0fTh3D4rk - So 03.09.06 12:27
bei torry gibts schöne einfache komponenten mit einfachen demos :wink:
LeoLöwe - So 03.09.06 12:41
Ach bei Torry... Och mensch bin blöde
Ok ich hab mir mal zwei zips runtergeladen und werde mal schauen was ich machen kann
Danke nochmal
GTA-Place - So 03.09.06 13:00
OK, jetzt dürft ihr mich schlagen. Ich meinte die Demos bei den Torry-Kompos und hab das jetzt mit Indy verwechselt (weil Indy [fast] alles kann) :oops:
LeoLöwe - So 03.09.06 13:10
*grummel* so eine Komponente von Torry lebt...
Und meine Kontaktliste ist blanko und ich bin dauer-offline :-(
Und zu allem überfluss komm ich bei ICQ auch nicht mehr rein weil ich mich wohl zu oft eingeloggt hatte
GTA-Place - So 03.09.06 13:45
Jop, musste ne Weile ohne ICQ auskommen.
LeoLöwe - So 03.09.06 13:49
Also nochmal vielene vielen Dank an euch alle!
Ich komm bei ICQ zwar immer noch nicht wieder rein, aber der Tipp mit torry war super.
Man muss zwar die Kontaktliste neu erstellen, aber dann erscheine ich auch als online und ich kann chatten.
Dann werde ich mal ein bisschen umschreiben und dann selber einen Chat basteln.
Mal sehen was sich da machen lässt... der Code von Torry sieht ziemlich complex aus, das wird sicher nicht leicht.
Die xtraz werde ich aber nicht einbauen, weder können noch wollen. Das ist das nervigstes am ganzen ICQ.
alias5000 - So 03.09.06 20:54
Es kursieren im Internet einige Reservse-Engeneering Protokoll-dokus rum. Das Protokoll heißt OSCAR.
Es wird von Zeit zu Zeit etwas verändert, um nicht ICQ-eigene Software auszusperren. Von daher verändert sich da immer mal wieder was. Man darf das bei Grundfunktionen wie Login oder Nachrichten schrieben erwarten. Vllcht finde ich auf meinem PC nochmal was, was ich mal rausgesucht hatte (weil ich in dem Bereich auch mal was vorhab). Indy selber bietet nur eine Kompo für IRC, nicht aber für die IMs wie ICQ, MSN,...
Aber ICQ setzt ja auf TCP auf, wenn ich das richtig mitbekommen habe.
Gruß alias5000
LeoLöwe - So 03.09.06 21:40
Also die Demo von Torry geht, sehr gut sogar. Ich werde mir das mal durchlesen und dann was basteln.
Wird hier auch veröffentlicht.
Xion - Mo 04.09.06 13:52
warum funktioniert denn der Befehl 'ICQClient1.RequestContactList' nicht...wenn ich z.B. unter OnContactListRequest einen beep setzte, kommt nix, er scheint gar nichts zu machen...und antwort bekomme ich ja dann natürlich auch keine :gruebel:
Xion - So 17.09.06 12:58
ich habe ein riesen-problem, dass eigentlich alle lösen müssen, die einen ICQ-Client schreiben: wie kann ich auf die nachfrage vom Server antworten, ob ich noch online bin? Denn: ich bekam heute eine offline-message von einer zeit, als ich on war?? => ich war zwar eigentlich noch on, der Server hat mich aber rausgeschmissen, weil ich anscheinend keine Verbindung verlangt habe. Da frage ich euch, was tun?
//grrr, erst suche ich ewig rum, dann frag ich hier, und dann find ichs immer doch noch... also die antwort ist ICQClient.SendKeepAlive; (hört sich zumindest passend an)
mangaka - Mi 20.09.06 00:22
hi,
also wie es aussieht kommst du mit der demo gut klar.
ich kenne die torry-kompos net und auch nicht die icq demo, trozdem interessiert mich dein späterer source-code.
du hast es ja schon angedeutet, aber plz poste es mal, wenn du soweit bist ;)
gn8
mangaka
Xion - Di 26.09.06 19:30
hi
1. ich geb nur ungern Code frei
2. das Programm kann mehrere Sachen (Wecker/ICQ/Ordnerverwaltung...), daher ist viel unwichtiger Code für dich dabei.
3. Es kommt mir immerso vor, als kämen manche Nachrichten nicht bei mir an...(das war mindestens einmal so, und das war SEHR ärgerlich, ich trau dem ganzen nichtmehr so. Vielleicht lags aber auch am ICQ-Server ;) )
4. Mein ICQ besteht nur daraus, dass man Msgs verschicken kann. Keine Dateien, keine Infos, kein Xtraz
an sich, guck dir mal den Threat an:
http://www.delphi-forum.de/viewtopic.php?t=59726&highlight=
wenn du einen Client schreiben willst, dann ist das ganz einfach, da alles schon von der Compo gemacht wird.
hier der betreffende Code:
XiCQon - part of the Nynx-program
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346:
| procedure TNynxForm.ShowICQ; begin PositionizePanel(PICQ); ShownPage:='ICQ'; ICQListOn.Left:=5; ICQListOn.Top:=64; ICQListOn.Height:=round((PICQ.Height-ICQListOn.Top-ICQListOn.Left)/2)-5; ICQListOn.Width:=PICQ.Width-2*ICQListOn.Left-30; ICQListOn.Enabled:=True; ICQListOff.Left:=5; ICQListOff.Top:=ICQListOn.Top+ICQListOn.Height+5; ICQListOff.Height:=ICQListOn.Height; ICQListOff.Width:=ICQListOn.Width; ICQListOff.Enabled:=True; ICQEdit.Width:=ICQListOn.Width; ICQEdit.Left:=ICQListOn.Left; ICQEdit.Enabled:=True; ICQSend.Width:=ICQListOn.Width; ICQSend.Left:=ICQListOn.Left; if ICQClient.LoggedIn=true then ICQSend.Enabled:=True
else ICQSend.Enabled:=False; SizeICQMsgs; FillICQMsgs; end;
procedure TNynxForm.ShowICQSettings; begin PositionizePanel(PICQSettings); ShownPage:='ICQSettings'; ICQLogin.Left:=5; ICQLogin.Top:=0; ICQLogin.Width:=round(PICQSettings.Width/2)-10; if ICQClient.LoggedIn=False then ICQLogin.Enabled:=True; ICQLogOff.Left:=ICQLogin.Left+ICQLogin.Width+10; ICQLogOff.Top:=ICQLogin.Top; ICQLogOff.Width:=ICQLogin.Width; if ICQClient.LoggedIn=True then ICQLogOff.Enabled:=True; ICQSignatur.Left:=5; ICQSignatur.Top:=30; ICQSignatur.Enabled:=True; ICQSignatur.Width:=PICQSettings.Width-2*ICQSignatur.Left; ICQProtokoll.Left:=5; ICQProtokoll.Enabled:=True; ICQProtokoll.Top:=ICQSignatur.Top+ICQSignatur.Height+5; ICQProtokoll.Width:=PICQSettings.Width-2*ICQProtokoll.Left; ICQProtokoll.Height:=PICQSettings.Height-ICQProtokoll.Top-ICQNR.Height-ICQPW.Height-3*5; ICQNr.Left:=5; ICQNr.Enabled:=True; ICQNr.Top:=ICQProtokoll.Top+ICQProtokoll.Height+5; ICQNr.Width:=ICQSignatur.Width; ICQPW.Left:=5; ICQPW.Enabled:=True; ICQPW.Top:=ICQNr.Top+ICQNr.Height+5; ICQPW.Width:=ICQSignatur.Width; end;
procedure TNynxForm.ICQClientError(Sender: TObject; ErrorType: TErrorType; ErrorMsg: string); begin Protokoll('Fehler: '+ErrorMsg); ShowMessage('Fehler: '+ErrorMsg); end;
procedure TNynxForm.Protokoll(Msg: String); begin ICQProtokoll.Lines.Add(Msg); end;
procedure TNynxForm.BICQLoginClick(Sender: TObject); begin ICQClient.Password:=ICQPW.Text; ICQClient.UIN:=strtoint(ICQNr.Text); ICQClient.Login; ICQClient.Status:=0; ICQLogoff.Enabled:=True; ICQLogin.Enabled:=False; Protokoll('logging in...'); end;
procedure TNynxForm.ICQLogOffClick(Sender: TObject); begin ICQClient.Logoff; ICQLogoff.Enabled:=False; ICQLogin.Enabled:=True; Protokoll('logged off'); ICQClient.ContactList.Clear; ICQClient.InvisibleList.Clear; ICQClient.VisibleList.Clear; end;
procedure TNynxForm.ICQClientServerListRecv(Sender: TObject; SrvContactList: TList); var A: integer; UserInfo: TUINEntry; begin ICQClient.ContactList.Clear; ICQListOff.Items.Clear; ICQListOn.Items.Clear; if SrvContactList.Count > 0 then for A:= 0 to SrvContactList.Count-1 do begin UserInfo := PUINEntry(SrvContactList.Items[A])^; if UserInfo.CType = U_NORMAL then begin if ICQClient.AddContact(UserInfo.UIN) then ICQListOff.Items.Add(UserInfo.Nick+'('+inttostr(UserInfo.UIN)+')') end else if UserInfo.CType = U_INVISIBLE_LIST then begin end else if UserInfo.CType = U_VISIBLE_LIST then begin ICQClient.AddContactVisible(UserInfo.UIN) end else ICQListOff.Items.Add('CType:'+inttostr(UserInfo.CType)+' '+UserInfo.Nick+'('+inttostr(UserInfo.UIN)+')'); end;
ICQClient.RequestOfflineMessages; end;
procedure TNynxForm.ICQClientLogin(Sender: TObject); begin Protokoll('connected with server'); ICQClient.RequestContactList; end;
procedure TNynxForm.ICQSendClick(Sender: TObject); var A: integer; S: String; ICQNR: integer; begin S:=ICQEdit.Text; if ICQSignatur.Text<>'' then S:=S+#13+'_____'+#13+ICQSignatur.Text;
for A:= 0 to ICQListOn.Items.Count-1 do if ICQListOn.Checked[A]=True then begin ICQNR:=strtoint(Copy(ICQListOn.Items[A],Pos('(',ICQListOn.Items[A])+1,Pos(')',ICQListOn.Items[A])-Pos('(',ICQListOn.Items[A])-1)); ICQClient.SendMessage(ICQNR,S); Protokoll('sending: '+S+' to '+GetNameFromClientContactList(ICQNr)); end; for A:= 0 to ICQListOff.Items.Count-1 do if ICQListOff.Checked[A]=True then begin ICQNR:=strtoint(Copy(ICQListOff.Items[A],Pos('(',ICQListOff.Items[A])+1,Pos(')',ICQListOff.Items[A])-Pos('(',ICQListOff.Items[A])-1)); ICQClient.SendMessage(ICQNR,S); Protokoll('sending: '+S+' to '+GetNameFromClientContactList(ICQNr)); end; ICQEdit.Text:=''; end;
function TNynxForm.GetNameFromClientContactList(UIN:integer):string; var A: integer; begin Result:=''; for A:= 0 to ICQListOn.Items.Count-1 do if Pos(inttostr(UIN),ICQListOn.Items[A])>0 then Result:=ICQListOn.Items[A];
for A:= 0 to ICQListOff.Items.Count-1 do if Pos(inttostr(UIN),ICQListOff.Items[A])>0 then Result:=ICQListOff.Items[A]; end;
function TNynxForm.ConvertSmilies(Msg:String):String; begin Result:=msg; Result:=StringReplace(Result,'<##icqimage0000>','*freu*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0004>','*traurig guck*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0008>','*zwinker*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage000c>','*Zunge rausstreck*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0007>','*heul*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0014>','*freu*',[rfReplaceAll]); Result:=StringReplace(Result,'*KISSED*','*Küsschen*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0005>','*geküsst*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage000a>','*rot werd*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage000e>','*Engelchen*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage000b>','*mund zukleb*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0003>','*wunder*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0009>','*schrei*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage000f>','*auslach*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0002>','*:|*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0001>','*oooh*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage000d>','*cool sei*',[rfReplaceAll]); Result:=StringReplace(Result,'[:-}','*musik hör*',[rfReplaceAll]); Result:=StringReplace(Result,'*TIRED*','*langweil*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0006>','*würg*',[rfReplaceAll]); Result:=StringReplace(Result,'<##icqimage0010>','*hör auf*',[rfReplaceAll]); Result:=StringReplace(Result,'*KISSING*','*küssen*',[rfReplaceAll]); Result:=StringReplace(Result,']:->','*böse*',[rfReplaceAll]); Result:=StringReplace(Result,'@}->--','*Blume geb*',[rfReplaceAll]); Result:=StringReplace(Result,'*THUMBS UP*','*Daumen hoch*',[rfReplaceAll]); Result:=StringReplace(Result,'*DRINK*','*Bier*',[rfReplaceAll]); Result:=StringReplace(Result,'*IN LOVE*','*verliebt*',[rfReplaceAll]); Result:=StringReplace(Result,'@=','*bumm*',[rfReplaceAll]);
end;
procedure TNynxForm.ICQClientMessageRecv(Sender: TObject; Msg, UIN: string); begin Msg:=ConvertSmilies(Msg); Msg:=RTF2Plain(Msg); AddICQMsg(GetNameFromClientContactList(strtoint(UIN))+':'+#13+Msg,'Msg'); Protokoll(GetNameFromClientContactList(strtoint(UIN))+': '+Msg);
Windows.Beep(2500,50); Windows.Beep(1500,50); Windows.Beep(500,50); end;
procedure TNynxForm.ICQClientOfflineMsgRecv(Sender: TObject; DateTime: TDateTime; Msg, UIN: string); begin Msg:=ConvertSmilies(Msg); Msg:=RTF2Plain(Msg); AddICQMsg(DatetoStr(DateTime)+' '+Timetostr(DateTime)+' '+GetNameFromClientContactList(strtoint(UIN))+' '+UIN+':'+#13+Msg,'OffMsg'); Protokoll(DatetoStr(DateTime)+' '+Timetostr(DateTime)+' '+GetNameFromClientContactList(strtoint(UIN))+': '+Msg);
Windows.Beep(1000,50); end;
procedure TNynxForm.AddICQMsg(Msg,Typ: String); var A: integer; begin for A:= 11 downto 0 do begin if A>0 then begin ICQMsg[A].Msg:=ICQMsg[A-1].Msg; ICQMsg[A].Typ:=ICQMsg[A-1].Typ; end else begin ICQMsg[A].Msg:='('+DatetoStr(Now)+'-'+TimetoStr(Now)+') '+Msg; ICQMsg[A].Typ:=Typ; end; end; FillICQMsgs;
end;
procedure TNynxForm.FillICQMsgs; var A: integer; begin for A:= 0 to 11 do begin if (ICQMsg[A].Msg<>'') then begin ICQMsg[A].Shape.Visible:=True; if FileExists(ICQMsg[A].Typ+'.bmp') then begin ICQMsg[A].Img.Picture.LoadfromFile(ICQMsg[A].Typ+'.bmp'); ICQMsg[A].Img.Visible:=True ; ICQMsg[A].Img.Hint:=ICQMsg[A].Msg; ICQMsg[A].Img.ShowHint:=True; end else begin ICQMsg[A].Img.Visible:=False; ICQMsg[A].Shape.Hint:=ICQMsg[A].Msg; ICQMsg[A].Shape.ShowHint:=True; end; end; end;
end;
procedure TNynxForm.SizeICQMsgs; var A: integer; begin for A:= 0 to 11 do begin ICQMsg[A].Shape.Left:=PICQ.Width-25; ICQMsg[A].Shape.Top:=A*21+8; ICQMsg[A].Img.Left:=ICQMsg[A].Shape.Left+2; ICQMsg[A].Img.Top:=ICQMsg[A].Shape.Top+2; end; end;
procedure TNynxForm.CreateICQMsgs; var A: integer; begin for A:= 0 to 11 do begin ICQMsg[A].Shape:=TShape.Create(NynxForm); ICQMsg[A].Shape.Visible:=False; ICQMsg[A].Shape.Parent:=PICQ; ICQMsg[A].Shape.Brush.Color:=$00FFAAAA; ICQMsg[A].Shape.Width:=20; ICQMsg[A].Shape.Height:=20;
ICQMsg[A].Img:=TImage.Create(NynxForm); ICQMsg[A].Img.Parent:=PICQ; ICQMsg[A].Img.Visible:=False; ICQMsg[A].Img.Width:=16; ICQMsg[A].Img.Height:=16; ICQMsg[A].Img.Stretch:=True; ICQMsg[A].Img.Proportional:=True; ICQMsg[A].Img.Transparent:=True; ICQMsg[A].Img.Center:=true; end; end;
procedure TNynxForm.ICQClientStatusChange(Sender: TObject; UIN: string; Status: Cardinal); var A: integer; begin for A:= 0 to ICQListOff.Items.Count-1 do if Pos(UIN,ICQListOff.Items[A])>0 then begin ICQListOn.Items.Add(ICQListOff.Items[A]); AddICQMsg(ICQListOff.Items[A]+' online','On'); Protokoll(ICQListOff.Items[A]+' online'); ICQListOff.Items.Delete(A); Windows.Beep(10000,10); Exit; end; end;
procedure TNynxForm.ICQClientUserOffline(Sender: TObject; UIN: string); var A: integer; begin for A:= 0 to ICQListOn.Items.Count-1 do if Pos(UIN,ICQListOn.Items[A])>0 then begin ICQListOff.Items.Add(ICQListOn.Items[A]); AddICQMsg(ICQListOn.Items[A]+' offline','Off'); Protokoll(ICQListOn.Items[A]+' offline'); ICQListOn.Items.Delete(A); Windows.Beep(10000,10); Exit; end; end;
procedure TNynxForm.TiICQTimer(Sender: TObject); begin if ICQClient.LoggedIn=true then ICQClient.SendKeepAlive; end; |
Xion - Fr 20.10.06 15:00
mir sieht diese Komponente sehr unzuverlässig aus. Ich habe das starke Gefühl, dass einige Nachrichten nicht bei mir ankommen (aber das gabs auch schon im original ICQ-Client) und dann hab ich herausgefunden, als ich "bye an alle" geschickt hab, dass er das "bye" abgeschnippelt hat. Jetzt setz ich ein " " davor, das schneidet er aber nicht ab. Bin momentan wieder mitm Original ICQ on, da ich dem ganzen irgendwie nichtmehr trau. Villeicht alles mein Fehler, aber ich find kein :( . Hat irgendwer auch einen Client geschrieben und ist der Meinung, dass es an mir liegen muss? Weil mein eigenes Prog find ich scho besser als der normale ICQ-Client.
Xion - Sa 21.10.06 11:05
:autsch: :motz: das gibts nicht. Jetzt hab ich das Problem schon so lang, kaum poste ich es hier als Frage, fällts mir ein. Also: Ich hab deswegen manche Nachrichten nicht bekommen weil sich mein Client abgemeldet hat (bevor ich die KeepAlive proc gefunden hatte) mein Client hats aber nicht angezeigt (weil ichs halt nicht anzeigen lasse). Dann hab ich jemanden was geschrieben, mein Client hat dadurch die Verbindung wieder aufgebaut, hat aber nicht nach den OfflineMessages gefragt, da ich das nur beim Login tu. Somit waren die ganzen Nachrichten dazwischen weg. (Ich hoff mal dass das der Fehler war, dann ist er wenigstens jetzt nichmer drin)
Xion - Sa 28.10.06 12:10
in der Hoffnung, dass es mir einfällt, wenn ich es hier poste: :lol:
die *Schimpfwort* von ICQ haben irgendwas gemacht, dass ich mit meinem Client nicht mehr online kann. Da kommen immer Fehlermeldungen, und zwar entweder 'Falsches Passwort' (stimmt garnicht, außerdem würde er mich dann nach dem 3. mal für ne weile sperren) und 'Defektes Login-Packet empfangen'. Find ich irgendwie fies. Oder liegt das an mir?
alias5000 - Sa 28.10.06 12:21
Das wird öfters gemacht, weil die versuchen wollen, nicht ICQ-eigene Clients auszusperren. Was denkst du, warum es bei Trillian und Miranda öfters Updates bei den Protokollmodulen gibt? Das OSCAR Protocol ist ja nicht offiziell öffentlich, sondern nur via Reverse-Engineering an die Öffentlichkeit gelangt.
Gruß alias5000
Calyptus - Sa 28.10.06 13:09
Hallo,
also für deine Sache mit dem LCD würde ich dir empfehlen 'nur' ein Miranda Plugin zu schreiben, und nicht einen ganzen Client. Denn dann musst du dich auch nur um einen kleinen Teil kümmern, der ganze Rest wird ziemlich zuverlässig von den Miranda Entwicklern gemacht.
Das hier könnte dir Helfen:
http://artfedorov.ru/miranda/historypp/
Xion - Sa 28.10.06 14:23
@calyptus: ich bin nicht der mit dem LCD ;) ich benutz die Compo TICQClient und die läuft normal prima und macht mir auch fast alles. Und das gute ist halt, dass ich es in mein anderes Prog integrieren kann. Nun müsste sich jemand hinsetzen und die Compo updaten. :( Dein Link scheint mir, als sei das auch ein großteils fertiger Client...den man noch bearbeiten kann, aber kann ich den auch in mein Prog aufnehmen? Wie die Compo?
Calyptus - So 29.10.06 06:12
Ne das ist einmal ein blanko Plugin und ein History Plugin, beide für Miranda
Xion - So 29.10.06 10:26
| http://www.artfedorov.ru/wikka/HistoryPP hat folgendes geschrieben: |
Advanced contact’s history with
* Find-as-you-type
* Customizible styles
* Instant filtering
* Export to html, xml, txt
* View all conversations with the contact in separate tree
|
| http://addons.miranda-im.org/details.php?action=viewfile&id=543 hat folgendes geschrieben: |
+ Translation support
+ Password protection
+ New "Copy Text" menu item, copies plain message body (text)
+ Ctrl+R now does "Reply Quoted". There's no menu item because this feature in miranda is buggy. See Hotkeys section in readme for shortcuts
* "Options" menu item added to "Additional" drop-down menu
- Fixed bug, when crash on Select All, Delete
- Bug when closing history window before find window, now there's no exception thrown
- "Show Event Icons" is always uchecked when Options window opens
- Added horizontal scrollbar to memo control in Event Details window
|
hört sich für mich irgendwie nach einem fertigen Client an...gibts da irgendwo sources, wie man darauf zugreift usw?
backdraft - Do 16.11.06 14:38
Hier ist eine gefixte TICQClient Komponente, die wieder nach der letzten Änderung verbinden kann.
Grüße Oliver
Xion - Fr 17.11.06 22:06
:autsch: ich dreh noch mal durch. Nach dem ich jetzt ca. 30 min rumgwürgt hab, kommt immernoch der Fehler 'Eigenschaft ICQServerViaHTTP existiert nicht' :(
Xion - Sa 18.11.06 13:56
Hi
aber die ICQLib ist ja von 2004 steht da. Ich hab nur irgendwie Probleme mit der Compo oben...da bekomm ich immer den Fehler.
Xion - Fr 01.12.06 16:01
nachdem ich jetzt den Fehler weghab (hab mich grad mal kurz hingesetzt und das Problem gleich gesehen: die Eigenschaft gibts halt nichtmehr, deswegen hab ich das Feld geleert, scho gings) kommt jetzt wieder der Fehler "Defektes Login-Packet empfangen"...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!