Test připojeni – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Test připojeni – Delphi – Fórum – Programujte.comTest připojeni – Delphi – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Borisek0
Návštěvník
17. 10. 2012   #1
-
0
-

Zdravím.

Snažim se na form umistit nějaky ten gombik, ktery by mně informoval zda jsem připojen k netu.

Něco takoveho.

procedure TForm1.Timer2Timer(Sender: TObject);
begin
If PingTime('173.194.35.152')= -1 then
                                      begin
                                        Image1.Picture:=nil;
                                        ImageList.GetBitmap(7, Image1.Picture.Bitmap);
                                      end
                                      Else
                                       begin
                                        Image1.Picture:=nil;
                                        ImageList.GetBitmap(6, Image1.Picture.Bitmap);
                                       end;
end;

Funguje to jak ma, ale pokud net nefunguje, program laguje.

Dočet jsem se na netu o vlaknech jako funkce a zkoušim.

function StavPripojeniThread(Param: Pointer): Longint;
    begin
      try
        If PingTime('173.194.35.152')= -1 then
                                      begin
                                        Form1.Image1.Picture:=nil;
                                        Form1.ImageList.GetBitmap(7, Form1.Image1.Picture.Bitmap);
                                      end
                                      Else
                                       begin
                                        Form1.Image1.Picture:=nil;
                                        Form1.ImageList.GetBitmap(6, Form1.Image1.Picture.Bitmap);
                                       end;
      except
      end;
      //
      Result:=0;
    end;
   
    A volam funkci v timeru.

   thh:=BeginThread(nil,0,@StavPripojeniThread,nil,0,thid);
        if (thh<>0) then begin CloseHandle(thh);
        end;

Take to funguje ale i když je nez furt funkční, přidělena ikona pro Image1 blika.

Ne že by to jen probliklo při mazazani Image1.Picture:=nil;

Ale při jednom pruchodu je vidět a při dalšim zmizne.

Kde muže byt kopanec.

Nahlásit jako SPAM
IP: 81.30.255.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
17. 10. 2012   #2
-
0
-

Co si přesně slibuješ od řádku: 

Form1.Image1.Picture:=nil;

?

A jen tak mimochodem není potřeba nastavovat ten obrázek vždy, ale jen při změně. Stačí si pamatovat stav (fční/nefční) a pokud ping rozhodne, že se změnil stav, tak změnit i ikonu/obrázek.

No a další věc. Není třeba neustále vytvářet znovu znovu to vlákno. To můžeš vytvořit jednou, může mít v sobě "nekonečnou" smyčku a něco vhodného na její zpomalení, i když klidně může běžet s nižší prioritou stále, ale to je otázka, co je pro tebe priorita.

Nahlásit jako SPAM
IP: 188.75.135.–
Borisek0
Návštěvník
17. 10. 2012   #3
-
0
-
Co si přesně slibuji od řádku: Form1.Image1.Picture:=nil;

No zkoušel jsem do jednoho buttonu dat
ImageList1.GetBitmap(0, Image1.Picture.Bitmap);
a do druheho
ImageList1.GetBitmap(1, Image1.Picture.Bitmap);
Prvni kliknuti na button funguje, dalši už ne,nepřekresluje se to.
Tak jsem zkoušel s nil před každym přikazem a pak to funguje.
Jiny zpusob neznam.

A s tym vlaknem furt dokola.
Čet jsem na Delphi.cz že je prasarna zastavovat vlakno přikazem sleep, pry to zatěžuje procak,tak mně napadlo toto.
Nahlásit jako SPAM
IP: 81.30.255.–
liborb
~ Redaktor
+18
Guru
18. 10. 2012   #4
-
0
-

Pokud měníš někde nějakou komponentu, tak by pak mělo stačit zavolat její překreslení. Pokud ti tvoje řešení funguje a vyhovuje, tak není potřeba nic měnit.

Použití Sleep ve vlákně bylo kdysi (pokud jsem to správně pochopil) "špatně", protože plánovač z toho pochopil, že to vlákno nepotřebuje takovou prioritu a snížil mu ji. Takže pokud by ses mu chtěl vyhnout, tak k tomu můžeš zneužít třeba semafor, který nikdy nenahodíš apod.

Nahlásit jako SPAM
IP: 188.75.135.–
Borisek0
Návštěvník
18. 10. 2012   #5
-
0
-

#4 liborb

A jak zavolat to překreslení pro komponentu Image

Nahlásit jako SPAM
IP: 81.30.255.–
mjseven0
Návštěvník
18. 10. 2012   #6
-
0
-

image1.Invalidate
případně 
image1.Repaint

Nahlásit jako SPAM
IP: 213.151.83.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 31 hostů

Podobná vlákna

C++ test — založil Mortimer

AND vs TEST — založil Ato

Test — založil Zdeny

Just test — založil Danstahr

Zatezovy test — založil BigBear

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý