Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Retomando este tema.
La función devuelve el ultimo dato (usando cualquiera de las funciones).
Me preguntaba si seria posible que devolviera el dato que uno necesite, el primero o el segundo o el ultimo (como en este caso).
Lo He intentado pero al contar el dato de atrás para adelante me coloca todas las palabras según van.
Se podrá hacer la diferenciación? o se necesitara otra función.?
Gracias
Saludos
Responder Con Cita
  #2  
Antiguo 12-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Mi buen amigo Carlos, ¿Por casualidad te refieres a esto?

Código Delphi [-]
TLaminaInfo = (liName, liDimension, liColor);

function GetLaminaInfo(LaminaText: string; Info: TLaminaInfo): string;
var PosIni, PosEnd: integer;
begin
  //preventiva
  PosIni := 0;
  PosEnd := 0;

  // Dependiendo de la info a pedir, calculamos posiciones
  // iniciales y finales
  case Info of
  liName: begin
            Posini := 1;
            PosEnd := Pos(' ',LaminaText);
          end;
  liDimension: begin
                 PosIni := Pos(' ',LaminaText) + 1;
                 PosEnd := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 2;
               end;
  liColor: begin
             PosIni := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 1;
             PosEnd := Length(LaminaText) + 1;
           end;
  end;

  // copiamos el texto que esté comprendido desde PosIni a PosEnd
  result := Copy(LaminaText,PosIni,PosEnd - PosIni);
end;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 12-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Gracias Marcelo por contestar.
Tengo algunas preguntas:
Esta parte es una variable publica??:
Código Delphi [-]
TLaminaInfo = (liName, liDimension, liColor);
Ahora para llamar a la funcion que tengo lo hago asi:
En este caso solo devuelve el ultimo valor.
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
var
ColorL: string;
begin
 ColorL:= DameElTipo(ComboBox1.Text);
 showmessage(ColorL);
end;
Como haria para llamar a tu funcion???.
Supongo que tengo que indicar el tipo (Posin) o (PosEnd), pero no se como hacerlo.
Saludos
Responder Con Cita
  #4  
Antiguo 12-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Perdón amigo, me olvidé de indicar que TLaminaInfo es un tipo de dato:

Código Delphi [-]
type
TTLaminaInfo = (liName, liDimension, liColor);

Y un ejemplo de uso de dicha función es el siguiente:

Código Delphi [-]
Edit1.Text := GetLaminaInfo(ComboBox1.Text,liName);
// con liName se obtiene el nombre, Por ejemplo: 'LAMINA'

Edit1.Text := GetLaminaInfo(ComboBox1.Text,liDimension);
// con liDimension se obtiene la dimensión. Por ejemplo: '132 X 185'

Edit1.Text := GetLaminaInfo(ComboBox1.Text,liColor);
// con liColor se obtiene el color, Por ejemplo: BONE.

El primer parámetro de la función es el texto completo. Por ejemplo: LAMINA 135 X 185 BONE. El segundo, el tipo de información a extraer.

Ahora que lo pienso y viendo lo que deseas hacer se debería modificar el tipo para mejorar el ejemplo:

Código Delphi [-]
type
TLaminaInfo = (liName = 0, liDimension = 1, liColor = 2);

De este modo puedes hacer coincidir los indices del Combo o de algún otro control con el tipo de dato. Por ejemplo:

Código Delphi [-]
Edit1.Text := GetLaminaText(Edit2.Text,ComboBox1.ItemIndex);

Suponiendo que en Edit2.Text estés guardando el texto completo e ItemIndex del combo represente el tipo de información que pide.

Mi función es probable que pueda ser mejorada para tus propósitos. La verdad es que la hice en 5 minutos, y no he pensado mucho en las posibilidades que necesitas. Mi intención era mostrar más o menos lo que entendía de tus requisitos.

Si es esto lo que andas buscando dimelo, y si no lo es, también dímelo (con tirón de orejas por no haber prestado demasiada atención).

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 12-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
En tu ultimo ejemplo, que me parece genial ademas de practico me genera este error:
Cita:
[Error] Unit1.pas(166): Incompatible types: 'TLaminaInfo1' and 'Integer'
en esta linea:
Código Delphi [-]
Edit2.Text := GetLaminaText(Edit2.Text,ComboBox4.ItemIndex);
No se si tendra que ver con que tendria que devolver un integer y pide un string.
No entiendo el por que??.
Saludos
Responder Con Cita
  #6  
Antiguo 12-04-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
¡Ouch!
Como se nota que he perdido la práctica con los enumerados!

Entonces modifica a la función por esta otra:

Código Delphi [-]
function GetLaminaInfo(LaminaText: string; Info: integer): string;
var PosIni, PosEnd: integer;
begin
  //preventiva
  PosIni := 0;
  PosEnd := 0;

  // Dependiendo de la info a pedir, calculamos posiciones
  // iniciales y finales
  case Info of
  0: begin
            Posini := 1;
            PosEnd := Pos(' ',LaminaText);
          end;
  1: begin
                 PosIni := Pos(' ',LaminaText) + 1;
                 PosEnd := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 2;
               end;
  2: begin
             PosIni := Length(LaminaText) - Pos(' ',ReverseString(LaminaText)) + 1;
             PosEnd := Length(LaminaText) + 1;
           end;
  end;

  // copiamos el texto que esté comprendido desde PosIni a PosEnd
  result := Copy(LaminaText,PosIni,PosEnd - PosIni);
end;

Y te olvidas del tipo TLaminaInfo, borralo.
Y ya no deberías tener problemas.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 12-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 28
Caral Va por buen camino
Hola
Muy interesante el concepto, Efectivamente funciona.
Gracias por el apoyo, me cuesta entender el concepto de las funciones pero con estas practicas voy aprendiendo.
Gracias de nuevo amigo.
Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener la parte decimal de un campo money mbelda MS SQL Server 4 08-02-2008 16:10:21
extraer un parte de un campo fecha de interbase!!! antonio peña SQL 2 04-10-2006 01:11:47
Identificar el tipo de dato kayetano MySQL 1 28-07-2004 19:43:54
como buscar dentro de una consulta un texto que sea parte de la descripcion viajero2015 Conexión con bases de datos 1 15-11-2003 05:18:09
eliminar parte de los datos de un campo acrophet Conexión con bases de datos 1 16-10-2003 13:07:51


La franja horaria es GMT +2. Ahora son las 02:25:13.


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