Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Llamar una fución(parametros) (https://www.clubdelphi.com/foros/showthread.php?t=46741)

Stevenmn 07-08-2007 21:59:42

Llamar una fución(parametros)
 
Buenas, lo que pasa es que tengo un problema desde ayer, hice una función para buscar en un memo, esta bien y todo, pero no se como llamarla, hace muy poco empece en delphi y pues estoy buscando a ver....


Esta es la funcion:

Cita:

function buscar(s:string;posicion:longint;o:boolean):string;
begin

o := InputQuery('Buscar..','Escriba la palabra a buscar',s);
posicion := Pos(s,form1.Memo1.Text)-1;

form1.Memo1.SelStart := posicion;
form1.Memo1.SelLength := Length(s);
form1.Memo1.SetFocus;

end;
y esta es la llamada:


Cita:

procedure TForm1.Buscar1Click(Sender: TObject);
begin
buscar('no se que poner aqui);
end;
El error es:


Cita:

value assigned o never used
Es con la variable o

eduarcol 07-08-2007 22:09:55

Pues estan mal declaradas las variables para comenzar, seria bueno si nos contaras que tipo de resultado debe devolver la funcion, booleano??

egostar 07-08-2007 22:11:30

algo así

Código Delphi [-]
  buscar('no se que poner aqui',1,true);


Salud OS

Stevenmn 07-08-2007 22:16:43

Cita:

Pues estan mal declaradas las variables para comenzar, seria bueno si nos contaras que tipo de resultado debe devolver la funcion, booleano??
Bueno pues no soy muy experto en funciones, pero el inputquery por lo que he visto se usa una variable booleana y el resultado como string

Cita:

buscar('no se que poner aqui',1,true);
:D:D:D Gracias man era justo eso, pero una cosa porque se le da el valor de 1 a posicion ?

No puede estar en cero o que ?

1 es para inicializarla ?

eduarcol 07-08-2007 22:21:41

Te explico cuando trabajas con funciones y procedimientos debes separar los parametros de las variables, en tu caso tienes tres variables y ningun parametro por lo que deberia quedar algo asi

Código Delphi [-]
function buscar:string;
var
   s:string;
   posicion:longint;
   o:boolean

ahora te puedo ayudar a estructurar mejor tu funcion pero dime que esperas de resultado de ella, que te devuelva el string que consiguio o un simple verdadero en caso de haberlo encontrado, porq segun tu codigo no se devuelve nada, en ese caso te convendria un procedimiento

pero todos son conjeturas hasta que nos explique mejor loq ue necesitas

Stevenmn 07-08-2007 22:46:40

Bueno lo que quiero hacer es un tipo de busqueda estilo bloc de notas, osea la string que le de en el inputquery la busque en el memo, si la encuentra empiece desde el valor de posicion, obtenga la longitud de la cadena y luego le de el focus a ella, para asi quedar señalada la palabra encontrada.

Fuciona bien.

Ahora estoy es tratando de hacer la "busqueda siguiente", pero como esto ya lo habia hecho en vb, pues ya se como podria, el problema en si era lo de los parametros dela funcion.


------

aaa y por lo de la funcion la hice asi por este documento del guille

http://www.elguille.info/delphi/apun...ntesDelphi.htm

Cita:

ROCEDIMIENTOS Y FUNCIONES



Delphi, es un lenguaje estructurado, lo cual indica que los programas escritos en este lenguaje, pueden descomponerse en pequeños módulos que pueden ser llamados cuando los necesitemos. Estos módulos en Pascal se llaman funciones y se identifican mediante un nombre. Se declaran del siguiente modo:



function nombre (argumento1: tipo; argumento2: tipo;...) : tipo;

Begin

<Acciones a realizar>

End;



Donde nombre es el nombre que se asignará a la función, argumento1 y argumento2 son valores que pasan a la función y tipo es el tipo de valor que retornará como resultado. Por ejemplo, si queremos implementar en Pascal la función matemática: f(x, y) = (x * x + y) / x siendo x e y números enteros, se realizaría de este modo:



Function f (x: integer; y: integer) : integer;

Begin

F = (x * x + y) / x;

End;

egostar 07-08-2007 23:59:45

Cita:

Empezado por Stevenmn (Mensaje 221358)
Bueno pues no soy muy experto en funciones, pero el inputquery por lo que he visto se usa una variable booleana y el resultado como string



:D:D:D Gracias man era justo eso, pero una cosa porque se le da el valor de 1 a posicion ?

No puede estar en cero o que ?

1 es para inicializarla ?

Pues asigne 1 porque se me pego la gana, :D:D, vamos, que puede ser el valor que sea o necesites. fue solo un ejemplo.

Salud OS

eduarcol 08-08-2007 00:03:21

Pues esta muy bien que te hayas documentado es bueno aprender las cosas por esfuerzo propio, pero lo que te decia es una forma mas adecuada de realizar las cosas, y te explicaba cosas que quizas no has visto, pues tienes las dos opciones tu escojes cual se adapte mas a tus necesidades

me alegra qe hayas podido resolver el problema

Stevenmn 08-08-2007 00:13:35

a listo gracias,

lo que no he podido hacer la busqueda siguiente intento pornerle +1 al llamarla, pero nada.


-------------------------------

Otra cosa en que evento se encargar de el texto seleccionado por ejemplo:

Tengo en un mainmenu el boto copiar, pero cuando no este nada seleccionado quiero que dessactivado, al igual queel bloc de notas de win, en algun onmouse o el onchage o ke.... voy viendo....

eduarcol 08-08-2007 00:33:35

aclareme algo, la busqueda funciono o no??

si no funciona prueba esto:

Código Delphi [-]
procedure buscar;
var
   cPalabra: String;
   nPos: Integer;
begin
   if InputQuery('Buscar...', 'Escriba la palabra a buscar', cPalabra) then
   begin
      nPos := Pos(cPalabra, Memo1.Text) - 1;
      Memo1.SetFocus;
      Memo1.SelStart := nPos;
      Memo1.SelLength := Length(cPalabra);
   end;
end;

eduarcol 08-08-2007 18:26:04

No habia visto bien lo que habias escrito,
Cita:

Empezado por Stevenmn (Mensaje 221426)
lo que no he podido hacer la busqueda siguiente intento pornerle +1 al llamarla, pero nada.

pues para realizar la busqueda siguiente no veo como adaptar lo qeu tienes a lo que necesitas, asi que te propongo dos bloques de codigo nuevos

Para buscar

Código Delphi [-]
if InputQuery('Buscar...', 'Escriba la palabra a buscar', cPalabra) then
   begin
      nPos := -1;
      nPos := Pos(cPalabra, Memo1.Text) - 1;
      if nPos =  -1 then
      begin
         ShowMessage('Palabra no encontrada');
         exit;
      end;
      cSinBuscar := Copy(Memo1.Text, nPos + 1 + Length(cPalabra), Length(Memo1.Text));
      nLength := Length(Copy(Memo1.Text, 1, nPos)) + Length(cPalabra);
      Memo1.SetFocus;
      Memo1.SelStart := nPos;
      Memo1.SelLength := Length(cPalabra);
   end;

Para buscar el siguiente

Código Delphi [-]
nPos := -1;
   nPos := Pos(cPalabra, cSinBuscar) - 1;
   if nPos =  -1 then
   begin
      ShowMessage('Palabra no encontrada');
      exit;
   end;
   cSinBuscar := Copy(cSinBuscar, nPos + 1 + Length(cPalabra), Length(cSinBuscar));
   Memo1.SetFocus;
   Memo1.SelStart := nPos + nLength;
   Memo1.SelLength := Length(cPalabra);
   nLength := nLength + Length(Copy(cSinBuscar, 1, nPos)) + Length(cPalabra);

Cabe destacar que debes tener esta variables en las globales

Código Delphi [-]
cPalabra, cSinBuscar: String;
   nPos, nLength: Integer;

cualquier duda avisas

Stevenmn 08-08-2007 19:05:12

muchas gracias por el code, sino consigo hacerla como quiero pues usare esa forma, lo que pasa es que lo quiero hacer de esta forma

http://www.recursosvisualbasic.com.a...ico5.htm#instr

Código:

Option Explicit

Private m_Pos As Integer


Sub buscar_cadena(ByVal Posicion As Integer)

Dim p As Integer, Frase As String

    Frase = txt_Buscar
   
    p = InStr(Posicion, Text1, Frase)
   
    If p > 0 Then
        m_Pos = p
       
        With Text1
            .SelStart = m_Pos - 1
            .SelLength = Len(Frase)
            .SetFocus
        End With
    Else
        MsgBox "No se encontró la frase", vbInformation
        Text1.SetFocus
    End If
End Sub

Private Sub Command1_Click()
Call buscar_cadena(1)
End Sub

Private Sub Command2_Click()
Call buscar_cadena(m_Pos + 1)
End Sub

Este mismo codigo lo he hecho en delphi, lo unico que varia es ala funcion isntr por pos.
El problema que creo que es, es que la funcion POS de delphi no requiere una posicion, en cambio la instr si, no habra otra ??


^^


La franja horaria es GMT +2. Ahora son las 07:31:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi