• 08-08-2012, 01:31:37
    #10
    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
  • 08-08-2012, 01:36:46
    #11
    Üyeliği durduruldu
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    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
    kodları hemen yerlestireyim.

    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:58
    #12
    hocam 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
    #13
    Üyeliği durduruldu
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    hocam 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ı?
    o zaman 1 tane browser olusuyor denedim ben bunu..

    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:00
    #14
    delphinin 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
    #15
    Üyeliği durduruldu
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    delphinin 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..
    simdi dediklerin doğru ama kısa yoldan yapmaya çalışıorum sadece..

    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.
  • 08-08-2012, 10:53:45
    #16
    delphi ile ilgili maalesef hiç bilgim yok. o yüzden yardım edemiyorum. zaten bu forumda da delphi kullanan kişi sayısı da çok çok az. ingilizcen varsa stackoverflow.com da konu açarsan hemen cevap alabilirsin..
  • 09-08-2012, 01:10:08
    #17
    SanCreaL adlı üyeden alıntı: mesajı görüntüle
    simdi dediklerin doğru ama kısa yoldan yapmaya çalışıorum sadece..
    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.
    Begin içine almadığından sadece alt satırı işleme alıyor yani;
    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