Ĺadny brzuch
Witam
Ciąg dalszy mych zmagań z THGG.... <_< Tera chodzi mi o rzecz następujacą... napisałem procedure pod zdarzenie OnMessage. Wygląda to mniej wiecej tak:
procedure TForm2.HGGMessage(Sender: TObject; GGNumber: Integer; MessageContent: String; MessageTime: TDateTime); var Nr: integer; begin Form2.numergg:= GGNumber; Form2.tresc:= MessageContent; //sprawdz czy user jest na liscie if Form2.HGG.Users.Find(GGNumber) = -1 then begin SetLength(Form3.F,20); for Nr := 0 to Screen.FormCount -1 do begin if Form3.F[Nr].Caption='Rozmowa z ' + Form2.HGG.Users.User[index].Name then begin if Form3.F[Nr].Showing=true then begin //Okno istnieje wiec nie tworz nowego tylko pokaz! :) Form3.F[Nr].BringToFront; Form3.dodajWiadomosc(nil); exit; end else begin //Okno istnieje, ale go nie widac, więc je pokaż (niestety obciąża procesor :) Form3.F[Nr].Show; Form3.F[Nr].BringToFront; Form3.dodajWiadomosc(nil); exit; end; end else begin //Okno nie istnieje wiec utworz je!!! NrOkna:=NrOkna+1; Form3.F[NrOkna] :=TForm3.Create(self); Form3.F[NrOkna].Caption:='Rozmowa z ' + IntToStr(GGNumber); {F[NrOkna].Label1.Caption:=IntToStr(Form2.HGG.Users.User[index].GGNumber) ;} Form3.F[NrOkna].Show; Form3.dodajWiadomosc(nil); end; end; end //jesli jest na liscie, to.... else begin index:=Form2.HGG.Users.Find(GGNumber); // Sprawdzenie czy istnieje juz to okno for Nr := 0 to Screen.FormCount -1 do begin [COLOR=red]TAK.....TO TA>>>>>if Form3.F[Nr].Caption='Rozmowa z ' + Form2.HGG.Users.User[index].Name then<<<<<TU...:][/COLOR] begin if Form3.F[Nr].Showing=true then begin //Okno istnieje wiec nie tworz nowego tylko pokaz Form3.F[Nr].BringToFront; exit; Form3.dodajWiadomosc(nil); end else begin //Okno istnieje, ale go nie widac, więc je pokaż Form3.F[Nr].Show; Form3.F[Nr].BringToFront; Form3.dodajWiadomosc(nil); exit; end; end else begin // okna ni ma, a wiec utwórz.... NrOkna:=NrOkna+1; Form3.F[NrOkna] :=TForm3.Create(self); Form3.F[NrOkna].Caption:='Rozmowa z ' + Form2.HGG.Users.User[index].Name; {F[NrOkna].Label1.Caption:=IntToStr(Form2.HGG.Users.User[index].GGNumber) ;} Form3.F[NrOkna].Show; Form3.dodajWiadomosc(nil); end; end; end; end;
Wiem, ze pewno nie bedzie sie wam chciało w to wgłebiac, wiec opisze z grubsza.... . To ma wpierw sprawdzic czy przysyłajacy jest na liscie (zaleznie od tego bedzie szukał wsród otwartych okien jego nazwy z listy lub numeru). Następnie ma wyłonic okno na pierwszy plan, lub je utworzyc jesli nie istnieje. Myslę ze załozenia merytoryczne są w miare w porządku, ale nie byłbym do konca pewien gdyz sam je wymyślałem.
Mniejsza o to... problemy w działaniu tego wygladaja tak: gdy wybiore kogos z listy, otworzy sie okno, zagaje do niego, OK. Ale gdy on odpisze, wiadomosc pojawia sie w nowym oknie, mimo ze jedno juz otwarte jest. Przy kazdej nowej wiadomosci od rozmowcy sie to powtarza, wiec chyba nieźle namieszałem..:] A gdy ktos napisze pierwszy, gdy nie ma okna gadki z nim, program sie wysypie, a kompilator zaznacza zieloną strzałką w źródle linijkie wyzej zaznaczoną TAK>>>.
No, to ma jeszcze ktos chęć pomoc? Szczerze zachecam....:]
Z poważaniem
Juzef
Użytkownik Juzef edytował ten post 03 kwiecień 2006, 16:20
Nie bardzo rozumiem pętlefor Nr := 0 to Screen.FormCount -1 do a potem odwołujesz się Form3.F[Nr] O co w tym chodzi "Form3.F" ;) ?
Szczerze mówiac nie jestem tez do konca pewien czy to jarze..... te kawalki zaczerpnąłem z przepisu na 'dynamiczne okienka' który chociazby na 4programmers jest. Ta pętla ma chyba przeszukac istniejace okna utworzone z Form3 ..... a F[Nr].... F to array złozony z Form3, czyli okna rozmowy, ktore ma zostac utworzone w razie potrzeby.
EDIT:
Ech, widze ze niewiele z was wyciągne, to moze chociaz powiedzta taką sprawę. Jak zamknę program gdy jest połaczony i zalogowany na konto, wywala taki bład: "Project raised exception class EIdClosedSocket with Message "Disconnected". Process stoped....". Cos sie da tu poradzic?
Juzef
Użytkownik Juzef edytował ten post 03 kwiecień 2006, 21:06
Hehhe.... juz sobie poradziłem z tytułowym problemem... ten w/w wciaz aktualny niestety... no i zaraz wygrzebie cos nowego pewno...:]
...Jak zamknę program gdy jest połaczony i zalogowany na konto, wywala taki bład: "Project raised exception class EIdClosedSocket with Message "Disconnected". Process stoped....". Cos sie da tu poradzic?
Juzef
hm.... nic wiele to nie daje... nadal sie wywala, a program wskazuje na linijke " raise EIdClosedSocket.Create(RSStatusDisconnected);" w pliku IdIOHandlerSocket.
Jak nie wydolicie to stawiam inny temat.... trza by mi jakos ustawienia zapisywac i ytera kwestia zem tu zielony, znaczy jakiego rodzaju plików mozn a by do tego uzyc, no i jak trzeba zaszyfrowac to w jaki sposób....
Juzef
Użytkownik Juzef edytował ten post 05 kwiecień 2006, 19:40
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Ciąg dalszy mych zmagań z THGG.... <_< Tera chodzi mi o rzecz następujacą... napisałem procedure pod zdarzenie OnMessage. Wygląda to mniej wiecej tak:
procedure TForm2.HGGMessage(Sender: TObject; GGNumber: Integer; MessageContent: String; MessageTime: TDateTime); var Nr: integer; begin Form2.numergg:= GGNumber; Form2.tresc:= MessageContent; //sprawdz czy user jest na liscie if Form2.HGG.Users.Find(GGNumber) = -1 then begin SetLength(Form3.F,20); for Nr := 0 to Screen.FormCount -1 do begin if Form3.F[Nr].Caption='Rozmowa z ' + Form2.HGG.Users.User[index].Name then begin if Form3.F[Nr].Showing=true then begin //Okno istnieje wiec nie tworz nowego tylko pokaz! :) Form3.F[Nr].BringToFront; Form3.dodajWiadomosc(nil); exit; end else begin //Okno istnieje, ale go nie widac, więc je pokaż (niestety obciąża procesor :) Form3.F[Nr].Show; Form3.F[Nr].BringToFront; Form3.dodajWiadomosc(nil); exit; end; end else begin //Okno nie istnieje wiec utworz je!!! NrOkna:=NrOkna+1; Form3.F[NrOkna] :=TForm3.Create(self); Form3.F[NrOkna].Caption:='Rozmowa z ' + IntToStr(GGNumber); {F[NrOkna].Label1.Caption:=IntToStr(Form2.HGG.Users.User[index].GGNumber) ;} Form3.F[NrOkna].Show; Form3.dodajWiadomosc(nil); end; end; end //jesli jest na liscie, to.... else begin index:=Form2.HGG.Users.Find(GGNumber); // Sprawdzenie czy istnieje juz to okno for Nr := 0 to Screen.FormCount -1 do begin [COLOR=red]TAK.....TO TA>>>>>if Form3.F[Nr].Caption='Rozmowa z ' + Form2.HGG.Users.User[index].Name then<<<<<TU...:][/COLOR] begin if Form3.F[Nr].Showing=true then begin //Okno istnieje wiec nie tworz nowego tylko pokaz Form3.F[Nr].BringToFront; exit; Form3.dodajWiadomosc(nil); end else begin //Okno istnieje, ale go nie widac, więc je pokaż Form3.F[Nr].Show; Form3.F[Nr].BringToFront; Form3.dodajWiadomosc(nil); exit; end; end else begin // okna ni ma, a wiec utwórz.... NrOkna:=NrOkna+1; Form3.F[NrOkna] :=TForm3.Create(self); Form3.F[NrOkna].Caption:='Rozmowa z ' + Form2.HGG.Users.User[index].Name; {F[NrOkna].Label1.Caption:=IntToStr(Form2.HGG.Users.User[index].GGNumber) ;} Form3.F[NrOkna].Show; Form3.dodajWiadomosc(nil); end; end; end; end;
Wiem, ze pewno nie bedzie sie wam chciało w to wgłebiac, wiec opisze z grubsza.... . To ma wpierw sprawdzic czy przysyłajacy jest na liscie (zaleznie od tego bedzie szukał wsród otwartych okien jego nazwy z listy lub numeru). Następnie ma wyłonic okno na pierwszy plan, lub je utworzyc jesli nie istnieje. Myslę ze załozenia merytoryczne są w miare w porządku, ale nie byłbym do konca pewien gdyz sam je wymyślałem.
Mniejsza o to... problemy w działaniu tego wygladaja tak: gdy wybiore kogos z listy, otworzy sie okno, zagaje do niego, OK. Ale gdy on odpisze, wiadomosc pojawia sie w nowym oknie, mimo ze jedno juz otwarte jest. Przy kazdej nowej wiadomosci od rozmowcy sie to powtarza, wiec chyba nieźle namieszałem..:] A gdy ktos napisze pierwszy, gdy nie ma okna gadki z nim, program sie wysypie, a kompilator zaznacza zieloną strzałką w źródle linijkie wyzej zaznaczoną TAK>>>.
No, to ma jeszcze ktos chęć pomoc? Szczerze zachecam....:]
Z poważaniem
Juzef
Użytkownik Juzef edytował ten post 03 kwiecień 2006, 16:20
Nie bardzo rozumiem pętlefor Nr := 0 to Screen.FormCount -1 do a potem odwołujesz się Form3.F[Nr] O co w tym chodzi "Form3.F" ;) ?
Szczerze mówiac nie jestem tez do konca pewien czy to jarze..... te kawalki zaczerpnąłem z przepisu na 'dynamiczne okienka' który chociazby na 4programmers jest. Ta pętla ma chyba przeszukac istniejace okna utworzone z Form3 ..... a F[Nr].... F to array złozony z Form3, czyli okna rozmowy, ktore ma zostac utworzone w razie potrzeby.
EDIT:
Ech, widze ze niewiele z was wyciągne, to moze chociaz powiedzta taką sprawę. Jak zamknę program gdy jest połaczony i zalogowany na konto, wywala taki bład: "Project raised exception class EIdClosedSocket with Message "Disconnected". Process stoped....". Cos sie da tu poradzic?
Juzef
Użytkownik Juzef edytował ten post 03 kwiecień 2006, 21:06
Hehhe.... juz sobie poradziłem z tytułowym problemem... ten w/w wciaz aktualny niestety... no i zaraz wygrzebie cos nowego pewno...:]
...Jak zamknę program gdy jest połaczony i zalogowany na konto, wywala taki bład: "Project raised exception class EIdClosedSocket with Message "Disconnected". Process stoped....". Cos sie da tu poradzic?
Juzef

hm.... nic wiele to nie daje... nadal sie wywala, a program wskazuje na linijke " raise EIdClosedSocket.Create(RSStatusDisconnected);" w pliku IdIOHandlerSocket.
Jak nie wydolicie to stawiam inny temat.... trza by mi jakos ustawienia zapisywac i ytera kwestia zem tu zielony, znaczy jakiego rodzaju plików mozn a by do tego uzyc, no i jak trzeba zaszyfrowac to w jaki sposób....
Juzef
Użytkownik Juzef edytował ten post 05 kwiecień 2006, 19:40