Ver Mensaje Individual
  #57  
Antiguo 09-03-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Reputación: 17
rauros Va por buen camino
Vale. Lo anterior ya está solucionado. Ahora tengo 2 problemas:

·No puedo instalar UniSynEdit (posteé en varios pero nadie me ayudó :S)
·Auto completar no funciona como querría que funcionara. Lo que quiero hacer es:

Que si escribo una palabra, se sustituya por otra, o la otra se escriba unos huecos más abajo.

Mi procedimiento de auto completar:

Código Delphi [-]
Procedure autocompletar(Memo: TMemo; leer: string; separacion: integer; sustituir: string);
begin
if form1.CheckBox1.Checked then begin // Este if funciona.
With Memo do begin
  posac:=caretpos.y;
  if uppercase(lines.strings[caretpos.y]) = uppercase(leer) then begin
    if separacion <> 0 then begin
      for n:=1 to separacion do Sustituir:=#13#10+Sustituir;
    SelText:=sustituir;
    end
    else begin
    lines.strings[caretpos.y]:=sustituir
    end;
  end;
end;
end;
setmemoposition(memo, memo.selstart,0)
end;

Para llamar a auto completar:
Código Delphi [-]
AutoCompletar(memo1,'If ',2,'EndIf'); // Escribe 2 lineas debajo EndIf cuando escribo If 
AutoCompletar(memo1,'[it',0,'[ItemDef  ]');//Sustituye [it por [ItemDef  ]

El problema es que cuando escribo If se me baja a endif en vez de volver a su sitio anterior. Y cuando vuelvo manualmente se vuelve loco el auto completar. El procedimiento de SetMemoPosition:

Código Delphi [-]
Procedure SetMemoPosition(Memo: TMemo; Col, Line: Integer);
var
i, Cuenta: Integer;
begin
with Memo do begin
LockWindowUpdate(Handle);
Cuenta:=0;
if Line<=Lines.Count then
  begin
  i:=0;
  While ido
    begin
    Inc(Cuenta,2+Length(Lines[i]));
    Inc( i);
    Perform(EM_SCROLL,SB_LINEDOWN,0);
    end;
  If Col<=Length(Lines[i]) then
    begin
    Inc(Cuenta,Col);
    SelStart:=Cuenta;
    end;
  end;
LockWindowUpdate( 0);
Refresh;
end; //with Memo do
end;

También tengo problemas con un procedimiento que se supone que tiene que escribir al final de todo lo escrito [EOF]. El procedimiento:

Código Delphi [-]
procedure EndOfFileAutomatico(memo: TMemo; right: boolean);
var
  posicionAnt: integer;
begin
if right then begin
if UpperCase(memo.Lines.Strings[memo.Lines.count + 1]) <> '[EOF]' then begin
    posicionant:=memo.CaretPos.y;
    memo.lines.strings[memo.lines.count]:='[EOF]';
    setmemoposition(memo, memo.selstart, posicionant)
end;
end;
end;

Para llamar al procedimiento:

Código Delphi [-]
EndOfFileAutomatico(memo1,checkbox1.Checked);

Muchísimas gracias de antemano.

Última edición por rauros fecha: 09-03-2008 a las 12:58:32.
Responder Con Cita