Autor Téma: kontrola pravopisu  (Přečteno 4636 krát)

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
kontrola pravopisu
« kdy: 01-07-2012, 20:49:08 »
Nazdarek

Tohle tema se zde jiz parkrat probiralo, ale neresi to muj problem  :'(
V app provadim kontrolu pravopisu zadaneho textu. Samotna kontrola je OK. Problem nastane az pri ukonceni kontroly, kdy se mi uzavrou dalsi pripadne otevrene dokumenty ve wordu, ktere s moji aplikaci nemaji nic spolecneho. A to neni zadouci.
Je mi jasne, ze problem je u mne (zrejme moje neznalost). Poradte, prosim, jak ukoncit provedenou kontrolu pravopisu, aby ostatni dokumenty otevrene ve wordu zustaly stale otevrene. Dekuji

Zde je vycuc kodu:
Kód: Delphi [Vybrat]
  1. procedure TfrmMailPis.acOdeslatExecute(Sender: TObject);
  2. var
  3.   WordDoc:TWordDocument;
  4.   WordApp:TWordApplication;
  5.   VarFalse: OleVariant;
  6.   colSpellErrors: ProofreadingErrors;
  7.   colSuggestions: SpellingSuggestions;
  8.   StopLoop: Boolean;
  9.   itxtLen, i, itxtStart: Integer;
  10. ...
  11. ...
  12. begin
  13.   ...
  14.   ...
  15.     WordApp := TWordApplication.Create(self);
  16.     WordApp.AutoConnect := false;
  17.     WordApp.AutoQuit := false;
  18.     WordApp.ConnectKind := ckRunningOrNew;
  19.  
  20.     WordDoc := TWordDocument.Create(self);
  21.     WordDoc.AutoConnect := false;
  22.     WordDoc.ConnectKind := ckRunningOrNew;
  23.  
  24.     try
  25.       WordApp.Connect;
  26.     except
  27.       xOK := 101;
  28.     end;
  29.  
  30.     if xOK = 0
  31.     then begin
  32.  
  33.       //--------------------------------------
  34.       WordDoc.ConnectTo(WordApp.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam));
  35.       StopLoop := False;
  36.       itxtStart := 0;
  37.       memA.SelStart := 0;
  38.       itxtlen := 0;
  39.       while true do
  40.       begin
  41.         // zde v kolecku poresim pripadne chyby
  42.         ...
  43.         ...
  44.       end; // while
  45.     end
  46.     else begin
  47.       xOK := 0;
  48.       TfrmHlaska.Execute('Na tomto počítači nelze provést kontrolu pravopisu', 1, self);
  49.     end;
  50.  
  51.     try WordDoc.Disconnect; except end;
  52.     try WordDoc := nil;     except end;
  53.     try WordDoc.Free;       except end;
  54.  
  55.     VarFalse := False;
  56.     try WordApp.Quit(VarFalse); except end;
  57.     try WordApp := nil;         except end;
  58.     try WordApp.Free;           except end;
  59.   ...
  60.   ...
  61. end;
  62.  




Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:kontrola pravopisu
« Odpověď #1 kdy: 01-07-2012, 21:16:24 »
Já s tímhle nikdy moc nedělal, ale přijde mi zbytečné to dělat wordem. Většina aplikací si vystačí se slovníkem slov, které porovnává se zadaným textem. Tipoval bych, že to zavření wordu ti dělá WordApp.Quit, asi bys to neměl volat, pokud už byl spuštěný.

Pak tam máš ještě pár pochybných kusů kódu:
try WordDoc := nil;     except end;
try WordDoc.Free;       except end;

požírat výjimky není zrovna košér, bývá dobré to alespoň dát do logu. Nastavit něco na nil a pak zavolat Free je blbost, protože Free už nic neudělá a v paměti ti zůstane viset nějaký objekt, na který se už nedostaneš (pokud nemáš referenci uloženou ještě někde). Takže buď volej Free a nastav na nil nebo můžeš volat FreeAndNil.

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #2 kdy: 01-07-2012, 21:44:20 »
"Musim" vyuzivat slovnik od ms office, to mam zadane ...

S Free, Nil a vyjimkama mas pravdu, ale az tak to nesouvisi s mym problemem.

Zkousel jsem : WordApp.Quit(VarFalse); WordApp.Quit(true); WordApp.Quit(false); WordApp.Quit; a vzdy to ovlivni rozjety word, ktery nesouvisi s mou aplikaci

Jak mam uzavrit pouze "muj" word a ostatni nechat ve stavu jak jsou ?? Diky ...

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:kontrola pravopisu
« Odpověď #3 kdy: 01-07-2012, 22:18:04 »
Jak mam uzavrit pouze "muj" word a ostatni nechat ve stavu jak jsou ?? Diky ...

třeba nevolat quit, pokud už ten word běžel?

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #4 kdy: 01-07-2012, 22:23:06 »
To jsem jiz vyzkousel, nez jsem zde napsal o radu, a samozrejme, ze to funguje, az na to, ze word (od me kontroly) potom zustane rozjety (vidno ve spravci uloh) a je jedno, jestli byl ci nebyl rozjety jiny word. A to asi neni nejlepsi reseni

Offline Petr Fiser

  • Příspěvků: 2
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #5 kdy: 02-07-2012, 07:43:25 »
Nevim zda trida TWordDocument obsahuje metodu Close(), ale vsude v prikladech vyhledanych googlem a s pozadavkem na uzavreni prave jen vlastniho dokumentu je volana pred metodou Quit(). Naopak Disconnect() tam nevidim, ale nemam delphi, tak jen nastrel...

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #6 kdy: 02-07-2012, 17:29:45 »
jj, dobry tip. pouzil jsem:
Kód: Delphi [Vybrat]
  1. var
  2.   VarFalse: OleVariant;
  3.   ...
  4. begin
  5.   ...
  6.   VarFalse := False;
  7.   WordDoc.Close(VarFalse);
  8.   ...
  9.  
a to ma za nasledek, ze se uzavre word dokument, ktery se pouziva pri kontrole pravopisu, avsak word, jako takovy zustava spusten. to uz neni na zavadu, protoze pripadne jine otevrene word dokumenty, ktere nesouvisi s moji app, zustanou beze zmeny a v pripade, ze zadny jiny word dokument nebyl otevern, tak rozjety word (pozustatek po moji app) bude bez problemu ukoncen pri vypnuti/restartu compu
DIKY  :)

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 448
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:kontrola pravopisu
« Odpověď #7 kdy: 02-07-2012, 18:18:42 »
Jako prvni si musis zjistit, zda Word bezi. Pokud bezi, nebudes pouzivat Quit, ale pouze zavres dokumenty, ktere jsi otevrel.

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #8 kdy: 02-07-2012, 22:21:28 »
rek bych, ze zjistovat pred spustenim kontroly pravopisu, zda je/neni jiz spusten word, nema moc smysl, protoze uzivatele jsou genialni a zvladnou behem kontroly pravopisu (kdyz se jim zobrazi nejaka nalezena chybka) spustit nebo se prepnout do jine app, coz muze byt treba word nebo si zahrat nejakou hru ...  :o 

ale jak jsem jiz psal v predchozim prispevku (odpoved #6),  reseni, ku kteremu jsem dosel dle rady petra fisera, je z meho pohledu postacujici

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 448
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:kontrola pravopisu
« Odpověď #9 kdy: 03-07-2012, 07:43:04 »
To, ze si uzivatel mezi tim dela neco jineho na zavadu neni. Prepinani do jinych aplikaci, hrani her apod, nevadi.  Ty vsak nechas Word po sobe spusteny vzdy. Pokud jej nechas spusteny skryty na pozadi, muze se stat, ze uzivatel pak nespusti Word normalne.

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #10 kdy: 03-07-2012, 09:40:02 »
Pravda, pravda, to by bylo neprijemne, kdyby uzivatel nemohl spustit word...

Kdyz tedy pred spustenim kontroly pravopisu budu kontrolovat, zda je/neni spusten word, a zjistim, ze neni spusten, tak po ukonceni kontroly pouziju:
  VarFalse := False;
  WordApp.Quit(VarFalse);
Ale co v pripade, ze uzivatel sikula behem kontroly spusti word ? To bych mu ho uzavrel bez ulozeni pripadnych zmen !!! To preci nemohu, to by mne nemel rad. A kdybych pouzil:
  VarFalse := True;
  WordApp.Quit(VarFalse);
tak to by se zase uzivatel sikula divil, proc se mu chce ukoncit word (slespon ze se ho pta, zda ulozit zmeny...)

Jak tedy na to ?
Diky za vase tipy  :)

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 448
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:kontrola pravopisu
« Odpověď #11 kdy: 03-07-2012, 15:07:23 »
Pokud chceš sofistikovane reseni, muzes to udelat nasledovne:
1. spustim nebo pouziju Word - nebudu se starat, jestli bezi
2. provedu, co potrebuju
3. zavru svuj dokument/sve dokumenty
4. pokud word obsahuje jeste nejaky dalsi otevreny dokument, necham jej zit. Pokud jiz njic dalsiho otevreneho neni, ukoncim jej

Tim budes mit zajistenu i situaci, kdy uzivatel mel otevreny Word pred tebou, neco delal a v prubehu tve prace dokument zavrel i situaci, kdy uzivatel v prubehu tve prace otere novy dokument.

Offline ble

  • Mladík
  • **
  • Příspěvků: 67
  • Karma: 0
Re:kontrola pravopisu
« Odpověď #12 kdy: 04-07-2012, 09:00:44 »
/Jan Fiala/
diky za inspiraci. po ukonceni kontroly pravopisu uzavru "muj" word dokument a pak teprve zkontroluji, zda spusteny word obsahuje jeste nejaky otevreny dokument. pokud ne, tak word ukoncim. jj, tenhle postup je slusny a spravny  ;)