![]() |
Cómo hacer para retornar valores de una Unit a otra
Hola, que pena con ustedes, soy nueva en este foro y no se donde dirigirme para poder aclarar mis dudas sobre delphi, estoy manejando delphi hace apenas unos días, con programacion orientada a objetos, bueno mi pregunta es la siguiente, estoy por ejemplo en una Unit1, desde esa Unit deseo llamar a otra Unit2, bueno en esta parte toda va bien ya lo hice desde la unit1 llamar a la Unit2, pero es lo siguiente, tengo informacion en la Unit2 por ejemplo un codigo, y necesito q sea retornado el valor de ese codigo a la unit 1, como hago para poder hacerlo, yo se que es algo muy elemental pero de igual manera soy nueva en el aprendizaje de delphi y se me hace dificil, porfa agradezco sea atendida mi solicitud, gracias
|
Hola Karo,
Bienvenido a clubdelphi. Como eres nueva en los foros, te invito a que destines unos minutos para conocer la guia de estilo. Respecto a tu pregunta, sería oportuno que aclares mejor tu situación. Un ejemplo de como lo estás haciendo, o enfocando el problema. Inicialmente si unit A debe comunicarse con otra B, A debe tener declarado en uses a B. Ahora bien, si a su ves B debe comunicar a A algo, debe declarar en uses a A. El problema es que si ambos se referencian... se forma una dependencia circular. Esto se soluciona trasladando la sección el "uses X" siendo X la unidad de A o B, de la sección interface a la sección implementation:
Ahora bien, en lo posible deben evitarse éstas dependencias mutuas, se puede plantear alguna alternativa. Y es por ello que yo indicaba al comienzo si nos puedes comentar con mayores detalles tu caso. Es una pregunta muy general el hecho de que "una unit deba devolver el dato a otra", cuanto más puntual seas más fácil será tratarlo. Lo más elemental sería que en Unit2, exista alguna función o método (si es que le pertenece a una clase) que regrese el valor que unit1 necesita. De este modo se puede evitar esta mutua dependencia y sólo unit1 se mantiene acoplada a unit2. Algo así:
Y de este modo, luego Unit1 puede hacer uso de Unit2:
Como te éstas iniciando en Delphi, sugiero que te acerques a la sección FTP y wiki del club. Allí encontrarás material tanto teórico como práctico. Recomiendo la lectura de la Cara Oculta de Delphi 4. Si tienes mayores dudas puedes consultarnos, pero recomiendo que antes de iniciar un hilo nuevo, realices una búsqueda. Existe la posibilidad de que tu duda haya sido tratada. Por cualquier duda sobre este tema que iniciaste, continúa aquí por favor. Saludos, |
Muchas gracias Delphius, en realidad no se como hacer, mira yo te dije q pues ya puedo llamar una unit2 desde una Unit1, pero cuando intento hacer lo de retornar un valor a la unit1 desde la unit2 no se como hacerlo hice lo q tu me dices, pero me vota error en la declaracion e implemtacion de la funcion creo q algo estoy haciendo mal o en su defecto no se como declarar ni implemtnar una funcion porfa colaborame, es muy importante para mi, no se si tienes lineas de codigo con la cual me pueda guiar gracias..
|
Hola karo,
Sería oportuno que nos indiques tu código para ver donde está la falla, y de paso podemos entender donde y cómo estás refenciando a las units y el uso que le estás dando a tus variables, métodos y/o procedimientos y funciones. Va a ser mucho mejor que nos comentes bien tu caso, en vez de estar poniendo un código y estar adivinando por donde estará el problema. El error que comentas sobre la declaración de implementación posiblemente se deba a que tienes declarado en la sección implementation el código del procedimiento al que intentas invocar y en interface no tienes su declaración... El asunto es que, sin ofender, si ver lo que estás haciendo y no haber expuesto el error textualmente ¿de que módo puedo ayudarte? No quiero estar a la adivinanzas, por favor brinda los debidos detalles para entenderte. Te lo he dicho en el anterior mensaje: comentanos. Saludos, |
Si señor usted tiene toda la razon tengo que ser mas explicita, a continuacion le envio los dos programas la Unit1 y la Unit3. para que usted ayude a mirar cual es el error, muchas gracias.
|
Hola Karo,
El error que veo está en que que tienes mal declarado la función sumardosnumeros. Veamos, la forma correcta es como sigue:
Fíjate que declaro la función despues del la definición del TForm2. Como puede observarse esta declaración pertenece a la sección interface. Compara con el tuyo y notarás que defines la función entre la declaración interface y uses. Eso no es correcto. Además el otro error está en escribir el cuerpo o código de dicha función dentro del evento OnClick del boton1. No es correcto, si te fijas el código está fuera... Ahora bien, si sigues los pasos como muestro en mi ejemplo, notarás que en tu form1 ya puedes incluir una referencia en uses hacia unit3 y podrás llamar a la función de forma algo similar a esto:
¿Ya leíste un poco al libro que te he recomendado? Ve al capítulo 3, página 57. Allí está bien explicado como se estructura una unit, como se declaran los tipos, variables, procedimientos, funciones, clases y métodos. Se puede declarar una función o procedimiento de otro, e incluso dentro de un evento... algo parecido a como lo tenías declarado en tu button1 de tu unit3. La cuestión es que si lo haces, sólo estas funciones y procedimientos "internos" sólo podrán ser usados dentro del evento, función o procedimiento principal. Además estos procedimientos y/o funciones internas no necesitan declaración en interface. Algo así:
Ahora sólo basta con agregar la declaración en la sección interface de la función SumarNumeros para que funcione. Creo que con esto se entenderá mejor el tema. Si tienes mayores dudas por favor dilo y vamos llendo paso a paso. Recomiendo mucho la lectura de la Cara Oculta. Si antes de Delphi pasaste por Pascal no creo que te resulte complicado adaptarte. Espero que se me entienda. Saludos, PD: Acostumbrate a emplear las etiquetas delphi: [ DELPHI ] tu código aquí... [ /DELPHI ] (Sin los espacios entre los corchetes). Notarás como el sistema de los foros solito le dará el formato adecuado... esto ayuda a comprender mejor el código. Como consejo, tabula tu código. |
¿Se me entendió karo?
¿Hay dudas?:confused::( Saludos, |
La franja horaria es GMT +2. Ahora son las 10:47:52. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi