Ver Mensaje Individual
  #13  
Antiguo 14-06-2004
korrekami korrekami is offline
Registrado
 
Registrado: jun 2004
Posts: 1
Reputación: 0
korrekami Va por buen camino
consejos de mejora al supercompo, para que no tenga problemas de versiones en DELPHI

Bueno, aqui va, es que yo cuando me he enfrentado a este componente, que me ha parecido genial, he tenido una serie de problemas en el metodo Open, porque yo cuando instale delphi lo hize para Office97 y este componente parece que requiere la BPL de XP, pero bueno todo empezo a darme problemas, hacia el open y al connectar con Word se me bloqueaba la aplicacion, se me quedaba WORD residente en memoria consumiendo en 97% de los recursos de sistema, etc... pues nada, mostrare aqui como he sustituido el metodo Open y los cambios que esto me supuso en el resto del componente.

Código Delphi [-]
procedure TWordParaTorpes.Open;
var
  DOCFileName,NewDOCFileName,ItemIndex:OleVariant;
begin
  NewDOCFileName := True;
  if FFileName<>'' then  DOCFileName := FFileName;
  WordApplication:= CreateOleObject('Word.Application');
//TWordApplication.Create(self);
  Doc:= WordApplication.Documents.Add(DOCFileName);//TWordDocument.Create(self);
  ParaFmt:= TWordParagraphFormat.Create(self);
//  WordFont:= TWordFont.Create(self);
  DOCFileName := EmptyParam;
  ItemIndex := 1;
  {try
    Wordapplication.Connect;
  except
    MessageDlg(sWordIsNotInstalled, mtError, [mbOk], 0);
    Abort;
  end; }
  try
    WordApplication.Caption := Caption;
    // Crear un nuevo documento
    NewDOCFileName := False;
    Wordapplication.Visible := True;    
   // Doc.ConnectTo(WordApplication.Documents.Item(ItemIndex));
    WordApplication.Options.CheckSpellingAsYouType := False;  //Desactivar comprobacion de ortografia
    WordApplication.Options.CheckGrammarAsYouType := False;
    ChangeFont;
  except
    on E: Exception do begin
      ShowMessage(E.Message);
      WordApplication.Disconnect;
    end;
  end;
end;

pero este cambio me llevo a dos cosas, una a tener que todas las variables de tipo RANGE, etc.. sustituirlas por OleVariant, pero bueno todo lo demas seguia funcionando bien, y cuando se hacia un BookMark para cambiar el texto, el metodo Set_Text tenia que sustituirlo por Text := loquesea

Otra de las pegas que encontre es que el ChangeFont ya no funcionaba, asi que lo elimine, pero tiene que funcionar de alguna forma, pero bueno, se lo dejo a alguien, no todo va a ser para mi claro, que no termine de probar todos los metodos, pero por lo menos error de compilacion no me daba.

Otro de los cambios que hizce fue en el Reemplace, lo hize tal que asi

Código Delphi [-]
    WordApplication.Selection.Find.ClearFormatting;
    WordApplication.Selection.Find.Text := '<<' + BookmarkName + '>>';
    WordApplication.Selection.Find.Replacement.Text := text;
    WordApplication.Selection.Find.Forward := True;
    WordApplication.Selection.Find.Wrap := wdFindContinue;
    WordApplication.Selection.Find.Format := False;
    WordApplication.Selection.Find.MatchCase := false;
    WordApplication.Selection.Find.MatchWholeWord := False;
    WordApplication.Selection.Find.MatchWildcards := false;
    WordApplication.Selection.Find.MatchSoundsLike := False;
    WordApplication.Selection.Find.MatchAllWordForms := False;
    WordApplication.Selection.Find.Execute(Replace := wdReplaceAll);
difiere un poco, pero hace exactamente lo mismo. seria cuestion de parametrizar todas las opciones de Buscar y Remplazar, porque aqui van todas puestas por defecto.

Por lo demas me funciona todo perfectamente, de hecho me ahorro muchisimo trabajo, GRACIAS Nailuj!! espero que de esta forma, ahora ya no sea necesario que envies la BPL ni el TLB, asi sera mucho mas optimo independientemente de la version de Word que se tenga instalada, tanto en el equipo como el Delphi.

Ale animaros todos!!!

Última edición por Nuria fecha: 15-06-2004 a las 13:50:28. Razón: poner las etiquetas de delphi para que se vea más claro el código
Responder Con Cita