anladığm kadarıyla null hatası bu
mesela şöyle düşün.
G[sira]) bu G dizi toplam 10 elemandan oluşuyor. o halde sira değeri 0 ile 9 arası olması lazım
sen G[10] yada G[40] gibi bir değer verirsen null döner. çünkü öyle bi eleman yok.
o yüzden for döngüsünü kontrol et, dizinin eleman syısından fazla mı dönüyor?
ayrıca break point koyarak g[sira] daki elemanın değerini görürsün. null u gördüğün an sira değrne bak kaçmış.sonra for u da ona göre düzenle
Delphi WebBrowser hakkında.
16
●1.888
- 08-08-2012, 01:36:46Üyeliği durduruldukodları hemen yerlestireyim.ertan2002 adlı üyeden alıntı: mesajı görüntüle
var sira:integer; G: Array [0 .. 99999] of TWebbrowser; begin for sira:=0 to listbox1.Items.Count -1 do G[sira] := TWebbrowser.Create(Form1); TWinControl(G[sira]).Name := 'myb' + inttostr(sira) + inttostr(Random(100000)); TWinControl(G[sira]).Parent := Form1; G[sira].Navigate('http://site.com'); end;listbox1 de 5 tane değer var butona tıkladığımda 5 tane browser acicam :S - 08-08-2012, 01:44:58hocam ben delphici değilim, sadece yorum yaptım.. kodda problem yok gibi görünüyor ama..
şimdi for döngüsünü kaldır
G[0] := TWebbrowser.Create(Form1); TWinControl(G[0]).Name := 'myb' + inttostr(0) + inttostr(Random(100000)); TWinControl(G[0]).Parent := Form1; G[0].Navigate('http://site.com');bunu bi dene bakalım. sorun for döngüsünde mi yoksa kodlarda mı? - 08-08-2012, 01:47:10Üyeliği durdurulduo zaman 1 tane browser olusuyor denedim ben bunu..ertan2002 adlı üyeden alıntı: mesajı görüntüle
sanırım problem döngüden değil. bir browser complete olmadan diğerleri açılmaya çalıştığı için hata veriyo kanımca.
Basit bi kodla browser ların tek tek yüklemesinin tamamlanmasını bekletmek gerekiyor gibime geliyor ama sadece tahmini tabiki
- 08-08-2012, 02:08:00delphinin yapısını bilmem ama senin kullandığın olay zaten kusura bakma ama saçmalığın daniskası
neden bunu dedim peki
1-webbrowser büyük bir nesne ondan 1000 tane oluşturmak mantıksız
2-amacın veri okumaksa webrequest gibi sınıflar kullanabilirsin
3- for döngüsü ile direk create etmek yerine multi-threading bir uygulama geliştir. thread kullanmayı öğren her iş daha sağlıklı ve kontrollü olur
4- thread yapısını kullandığın için demin söylediğin işlemi gerçkleştirebilirsin. aynı anda bir sürü thread çalıştırabilirsin hiçbirinin dönüş değerini beklemeden
5- bir sürü thread çalıştırmak yerine bir havuza toplayıp onları işlemcinin ve internet bağlantının kapasitesine göre belli sayıda çalıştırmak ve tüm threadlerin sonlanmasının ardından yeni bir grup threadi çalıştırmak daha mantıklıdır
önerilerim bunlar.. - 08-08-2012, 02:27:43Üyeliği durduruldusimdi dediklerin doğru ama kısa yoldan yapmaya çalışıorum sadece..ertan2002 adlı üyeden alıntı: mesajı görüntüle
Amacım su atıyorum listede 5 sitemi var hepsinin aynı anda navigate edilmesi yada çalıştırılması.. multi-thread olayın tabiki daha mantıklısı bende delphiyi o akdar bilmiyorum. arastırdım ama tam net bi kaynak bulamadım. - 09-08-2012, 01:10:08Begin içine almadığından sadece alt satırı işleme alıyor yani;SanCreaL adlı üyeden alıntı: mesajı görüntüle
G[sira] := TWebbrowser.Create(Form1);
10 defa bu değer dönüyor.
var
sira:integer;
G: Array [0 .. 99999] of TWebbrowser;
begin
for sira:=0 to 10 do
begin
G[sira] := TWebbrowser.Create(Form1);
TWinControl(G[sira]).Name := 'myb' + inttostr(sira) + inttostr(Random(100000));
TWinControl(G[sira]).Parent := Form1;
G[sira].Navigate('http://site.com');
end;
böyle yapman durumunda hata kalmayacaktır. Ben biraz karmaşık bir sistem yapmıştım çakışmaları önlemek için random kullandım sen
TWinControl(G[sira]).Name := 'myb' + inttostr(sira);
yapsanda olur. Dediğim gibi webbrowser oldukça ilkeldir. Örneğin formu gizlediğinde webbrowser işlem yapmaz. Sebebi çizemediğinden.
Twincontrol(G[sira]).HandleNeeded;
eklersen form'u hide veya visible:=false yaptığında da çalışacaktır. Buda ek bilgi olsun
Delphi XE2 'de sorunsuz çalışıyor kod. Ancak bu delphi nerede ne hata vereceği belli olmaz
neden bunu dedim peki