ďťż

Ł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
  •