Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Help PLS!!!!  (Citit de 3566 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« : Mai 08, 2005, 19:55:22 »

Am nevoie repede de ajutor...
Lucrez la un atestat pentru un prieten si am un bug pe care nu stiu cum sa-l rezolv. Am facut un editor simplu de HTML.
Arata cam asa:
Cod:

+---------------------------------+
|                                 |
|  web browswer                   |
|                                 |         <- aici arata pagina
|                                 |
|                                 |                      
+---------------------------------+

+---------------------------------+
|                                 |
|    Editor(gen Notepad)          |
|                                 |        <- Editor
|                                 |
|                                 |                      
+---------------------------------+

In momentul in care scriu  sau sterg o litera din Editor salveaza un fisier "temp.html" iar apoi Web Browser-ul incarca fisierul....
codul arata asa :
Cod:

procedure TForm1.Memo1Change(Sender: TObject);
begin
 Memo1.Lines.SaveToFile('temp.html');
 WebBrowser1.Navigate('d:\jhj\temp.html'); //am scris calea direct...
end;

Problema:
In momentul in care scriu mai repede imi da eroare si spune :
'Cannot create file d:\jhj\temp.html' . The process cannot acess the file because it is  being used by another process.

Atestat-ul il puteti descaraca de pe pagina :

http://ofgods.com/cata/atestat/ Proiectul este arhivat SFX.

Va rog mult , daca stiti sa rezolvati problema scrieti-mi cat mai repede posibil...

                                 Multumesc anticipat!
Memorat
cristi8
Vizitator
« Răspunde #1 : Mai 08, 2005, 21:31:51 »

1. ai putea sa pui un timer si sa updatezi html-ul periodic
2. ai putea sa pui un buton de "preview" si arata site-ul doar cand dai pe el

daca vrei neaparat cu apasatul butoanelor... ori ai putea sa "prinzi" eroarea si sa updatezi iar in jumate de secunda,
sau... sa salvezi tempSS (unde SS sunt secundele de la ceas Smile) ) si sa le stergi la un moment dat..


... poate mai au si altii alte idei..

...eu as prefera prima varianta, cu un timer la jumate de secunda sa updateze htmlul daca s-a modificat textul
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #2 : Mai 09, 2005, 07:28:34 »

Pai un ideea e ca Windowsul primeste "ordine" sa scrie fisierul, dar intai il pune in cache, deci daca faci 2 operatii succesive diferite trebuie sa ai un mic delay sau ceva intre ele (mi se pare ca prinzi SO in momentul cand scrie cache-ul pe harddisc).
O idee ar fi sa dai flush dupa write, asa forteaza SO sa scrie tot ce are in cache! Nu m-am uitat pe sursa dar cred ca asta va rezolva problema!
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #3 : Mai 09, 2005, 08:46:52 »

Problema apare pentru ca tu rescrii temp.html din care browser-ul inca mai citeste.

Nu scapi de problema nici daca pui doar un timer. Nu ai de unde sa stii cat dureaza incarcarea paginii.



1. Pune un timer care sa dea refresh periodic (daca s-au facut modificari) insa, inainte sa dea refresh, sa interogheze proprietatea "ReadyState" a controller-ului. Daca e READYSTATE_COMPLETE atunci ai unda verde.

2. Baga cod HTML direct in browser, fara sa mai folosesti fisiere temporare.
Cod:
function WbLoadFromStrings(wb: TWebBrowser; const AStrings: TStrings): HResult;
var
    M: TMemoryStream;
begin
    if not Assigned(wb.document) then AssignDocument(wb);
    M := TMemoryStream.Create;
    try
        AStrings.SaveToStream(M);
        Result := LoadFromStream(wb, M);
    except
        Result := S_FALSE;
    end;
    M.free;
end;


1 si 2 sunt complementare.
Daca faci doar 2 vei mai primi mesaje de eroare in functie de PC/versiunea IE/cat de repede scrii.

Have fun!
Memorat
mindphobia
Vizitator
« Răspunde #4 : Mai 09, 2005, 11:41:43 »

Citat din mesajul lui: svalentin
Pai un ideea e ca Windowsul primeste "ordine" sa scrie fisierul, dar intai il pune in cache, deci daca faci 2 operatii succesive diferite trebuie sa ai un mic delay sau ceva intre ele (mi se pare ca prinzi SO in momentul cand scrie cache-ul pe harddisc).
O idee ar fi sa dai flush dupa write, asa forteaza SO sa scrie tot ce are in cache! Nu m-am uitat pe sursa dar cred ca asta va rezolva problema!


wrong idea, vezi post-ul lui wickedman pentru solutia corecta.
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #5 : Mai 09, 2005, 14:36:05 »

THX all  Smile
Legat de timer...
Nu merge, cum trebuie + tot se aude sunetul ala aiurea cand incarca pagina...
Am incercat cu un delay dar tot nu merge...
Wickedman mersi pentru cod o sa incerc asa, sper sa si inteleg tot ce face acolo ca trebuie sa-l si explic  wink
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #6 : Mai 09, 2005, 14:57:20 »

Hmm acum vad...
Imi da ceva eroare...
Majoritatea instructiunilor nu le-am folosit niciodata si imi este greu sa-l modific sa vad cum ii bine...Daca poti sa rescri codul corect  Rolling Eyes
Imi da eroare la AssignDocument.
Si sincer nu prea stiu cum sa folosesc functia ...
Ce face? pune in bowser linie cu linie!?
Daca poti sa dai un exemplu cum se foloseste functia...
Sau o pagina web din care sa ma documentez...

M-am uitat prin Help, mi-am dat seama in mare cam ce face...
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #7 : Mai 09, 2005, 17:23:45 »

c'mon dude, trebuia sa te prinzi Smile

1. aici ai functia independenta
Cod:
function WbLoadFromStrings(wb: TWebBrowser; const AStrings: TStrings): HResult;
var
    M: TMemoryStream;
begin
    M := TMemoryStream.Create;
    try
        AStrings.SaveToStream(M);
    M.seek(0, 0);
      Result := (wb.Document as IPersistStreamInit).Load(TStreamAdapter.Create(M));
    except
        Result := S_FALSE;
    end;
    M.free;
end;


2. nu uita sa dai "uses ActiveX"

3. in event-ul OnCreate al formularului trebuie sa apelezi
Cod:
WebBrowser1.Navigate('about:blank');
ca sa se initializeze


un exemplu de utilizare:
Cod:
WbLoadFromStrings(wb, Memo1.Lines);
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #8 : Mai 09, 2005, 17:41:54 »

O gramada de THX  wink
Ce sa mai zic esti bun.
In mare am inteles cam ce face...
O sa mai sap acum Smile
Mersi mult, daca ne intalnim fac cinste cu o bere  Cool
Memorat
rgrig
De-al casei
***

Karma: 46
Deconectat Deconectat

Mesaje: 144



Vezi Profilul WWW
« Răspunde #9 : Mai 10, 2005, 10:54:36 »

Doar o idee (in plus fata de ce a spus wickedman, nu in loc de...):
1. de fiecare data cand user-ul tasteaza ceva setezi un timer la valoarea constant_delay
2. de fiecare data cand timer-ul ajunge la zero trimiti html-ul la browser

(timer-ul este unul singur pe aplicatie)

In felul asta sunt sanse mici sa gasesti browser-ul ocupat cand vrei sa-i trimiti date fiindca n-o sa incerci niciodata sa o faci la un interval mai mic de constant_delay. In plus mie ca utilizator mi-ar placea mai mult un comportament de genul asta.

PS: Nu stiu pascal/delphi (banuiesc ca asta e ce scrie mai sus Smile ) asa ca nu stiu cat de usor e de implementat ce am spus.
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #10 : Mai 10, 2005, 15:16:35 »

Initial asa am facut(salvam pe HDD fisierul "temp.html" si apoi il incarcam in browser) dar daca fac cu un timer tot timpul se aude un sunetul cand incarca, si sa o tot auzi din 0.3 in 0.3 s ii cam enervant...
Totusi asi putea pune un delay(t) in momentul in care observ ca in memo s-a schimbat ceva, dar cred ca dupa fiecare tasta apasata trebuie sa mai astepti inca t sec pentru a scrie alta litera.Si nici asa nu rezolv problema.
Cu codul lui wickedman nu mai este problema, deci nu cred ca are rost sa pun o temporizare...
ii OK nu mi-a facut nici o figura...
Totusi THX pentru sugestie  Smile
Memorat
rgrig
De-al casei
***

Karma: 46
Deconectat Deconectat

Mesaje: 144



Vezi Profilul WWW
« Răspunde #11 : Mai 10, 2005, 17:37:07 »

Eu nu am sugerat nimic legat de modul de transfer al informatiilor.

In varianta in care refresh-ul se face periodic independent de ce tasteaza utilizatorul programul are sansa sa para "sacadat". Daca insa refresh-ul se face la 0.5s dupa ce utilizatorul termina de tastat (1 tasta sau 30) look&feel-ul este dupa parerea mea mai bun.  Daca mi-aduc bine aminte exact comportamentul asta (poate cu alta constanta de timp) l-am vazut la unele editoare de HTML (HomeSite?).

Ce am zis legat de timer era doar o sugestie de implementare, care habar n-am daca e fezabila in mediul in care lucrezi tu.
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #12 : Mai 10, 2005, 20:49:51 »

Nu ai citit acolo cu atenti , ti-am spus cum l-am facut eu si cum am folosit temporizarea....
     Am inteles ce vrei sa zici tu dar, proiectul ii ok , nu apare nici macar o intentie de sacadare...
Daca totusi esti curios sa vezi cum arata intra pe http://ofgods.com/cata/. Project1.SFX.exe
  Nu ar avea rost sa fac un refresh la 0.5 secunde din moment ce totul este OK. Nu ti se pare mai fain ca atunci cand tastezi sa-ti apara imediat si rezultatul...
  Mersi pentru sugestii, dar sunt multumit de stadiul in care se afla atestat-ul.
P.S Daca sesizezi ceva bug-uri pls sa-mi spui.  Smile
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #13 : Mai 10, 2005, 22:53:12 »

Nu am download-at proiectul dar rgrig le zice bine.
Erori nu ai sa vezi ca doar interoghezi ReadyState.
Daca insa vei lucra cu un HTML de cativa MB o sa ti se para al naibii de suparator sa astepti dupa fiecare tasta. Daca tot merge bine, schimba PC-ul  Very Happy

Oricum, probabil e suficient pentru un atestat.
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #14 : Mai 11, 2005, 05:59:37 »

Aha , am inteles, nici nu mi-a trecut prin cap sa vad daca merge la fisiere atat de mari,paginile o sa fie gata facute(mici),cand prezinta atestat-ul trebuie sa arate doar ca functioneaza....
     10x
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines