Está en la página 1de 17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

Delphi Bsico

SELECCION DE CONTENIDO (2003-2013)

THE EMBARCADERO MVP PROGRAM

DELPHISPANO

FB DELPHI SOLIDARIO

MAPA

LEGAL

Dar una buena imagen! Parte I


Salvador marzo 20, 2013 Artculos, Cdigo, DataSnap, Delphi, FireMonkey, LiveBindings, XE3

Al da con HTML5 Builder y F.Charte

Buscar
Search this website

Categoras
Elegir categora

Hace unas semanas, comparta con uno de los compaeros de la Comunidad su inquietud hacia una de las entradas que se public al final del ao anterior. Concretamente este compaero me hablaba de la entrada del Seminario de Valencia, en cuyo interior se incluan algn retazo del cdigo que se vio en aquella sesin.

A cerca de m

Salvador Jover

Proyecto DelpHispano

Segn me comentaba, el intento de obtener una imagen desde un servidor de DataSnap y mostrarla en la parte cliente, era lo que en ese momento le estaba dando problemas, por lo que, tras cruzar
delphibasico.com/delphi/?p=3858

1/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

varios correos con l, decid preparar un pequeo ejemplo en el que lo pudiera ver y entender con algo mas de detalle, tomando como gua aquella entrada del seminario. As que estas lineas responden un poco a esa motivacin, pensando que otros compaeros puedan albergar dudas similares y pueda ser de ayuda su lectura.
Redes Sociales

PRXIMO EVENTO XE4!

Divide y vencers
Al igual que reza la mxima clsica, he credo conveniente dividir el contenido en varias partes para que queden un poco mas claros los comentarios que vamos a compartir. La idea es muy simple: crear un servidor de DataSnap con un mtodo que devuelva una imagen y que sea consumida por una aplicacin cliente. Esa era la pregunta inicial que l me haca y la idea -pienso yo- es que sea lo mas sencillo posible para no enredar con otros puntos que puedan desviarnos. Lgicamente, y para poder ver esto, necesitamos previamente que existan esas imgenes y una base de datos de forma que el servidor de datos acceda a este contenido y lo exporte al cliente que consume el servicio. Por todo esto, en esta primera parte vamos a presentar la base de datos que servir a nuestro propsito la cual ser la que originalmente contiene las imagenes que el servidor de datasnap exportar. Y construiremos una pequea utilidad o herramienta casera que nos permita acceder a la tabla de imgenes para gestionar su contenido. De esa forma, al acabar esta parte, tendremos todo a punto para abordar la creacin del servidor y cliente. A continuacin podis ver unas imagenes de la aplicacin:

PROMOCIN XE4!

Grupo Facebook Delphi Comunidad Australiana


Australian Delphi User Group Members

Solidario
S parte del grupo de facebook ms activo de nuestra Comunidad Hispana: Delphi Solidario. Unete a nuestro esfuerzo por hacer de la
2/17

Comunidad de Brasil y Portugal

delphibasico.com/delphi/?p=3858

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

Active Delphi Fernando Rizzato: Delphi for Enterprise

Comunidad Hispana de Delphi en facebook un sitio de encuentro y productividad.

Comunidad EEUU y habla inglesa


Andy's Blog and Tools

Miembros: 384 Moderadores: 4

blog.marcocantu.com marco's tech world Delphi Insider RSS de las Felix ColibriDelphi Source Code, Technical Articles, Delphi Trainings, Delphi Consulting and Development RSS de los comentarios WordPress.org entradas

Meta
Acceder

Suscrbete al blog por correo electrnico


Introduce tu correo electrnico para suscribirte a este blog y recibir notificaciones de nuevas entradas. nete a 1
3/17

En la segunda parte, que ser publicada posteriormente, completaremos el ejercicio o la demo, o como queris llamarlo, con la creacin del servidor y cliente de datasnap (que usar la base de datos que ahora vamos a ver). Finalmente, una tercera parte abordara un tema ms avanzado, en el que nos preguntamos qu hacer si necesitamos exportar un tipo complejo, fuera de los que existen por defecto. Ahh. Olvidaba comentar que nos apoyaremos en Rad Studio XE3 e Interbase, a travs de la plataforma de
delphibasico.com/delphi/?p=3858

Nick Hodges Sip from the Firehose The Hackers Corner | Complex problems have simple easy-tounderstand wrong answers

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

FireMonkey.

The Road to Delphi a Blog about programming

suscriptor Correo electrnico

Nuestro planteamiento
Lo primero de todo, vamos a crear la base de datos, en la que por simplicidad, se definir una sola tabla que supuestamente albergar las imgenes que nos servirn a efecto de banner, razn por la que he acabado llamado a la tabla con ese nombre (Banners). Adicionalmente, vamos a definir dos campos en dicha tabla: IDBanner (Integer) y Banner (Blob), que como podis observar, representan respectivamente la clave primaria y el campo que contiene la imagen. Se supone que al final, quedara una tabla conteniendo en sus respectivos registros las distintas imgenes que exhibiriamos como publicidad de forma que pudiramos hacer algo con ellos (podramos por ejemplo desear mostrar aleatoriamente uno de ellos, o automatizar transiciones mediante llamadas periodicas, etc..). Digo esto mas que nada para que tenga un poco de sentido el ejemplo. En nuestro script de Interbase, se representa con la siguiente sentencia ddl:

Subscribir

Comunidad Hispana
/*Prog*/ Delphi-Neftal /*finProg*/ Andreano Lanusse Making Things Happen Aprendiendo Firemonkey Blog de Carlos G Daniel Luyo Daniel Magin Delphi en Movimiento Delphi Live

Comentarios recientes
Jose E Leyva en Dieciocho aos de Delphi y un largo camino por andar Salvador en Dar una buena imagen! Parte 2 GustavoSV en Dar una buena imagen! Parte 2 Al Gonzlez en Dieciocho aos de Delphi y un largo camino por andar Eliseo Gonzalez Nieto en Dieciocho aos de Delphi y un largo camino por andar

C R E A T ET A B L EB A N N E R S( I D B A N N E R I N T E G E RN O TN U L L , B A N N E R ) ; B L O BS U B _ T Y P E0S E G M E N TS I Z E8 0

Delphi Magic Delphi y FastReport El blog de cadetill El blog de jachguate El Blog de Jhonny Surez El blog del Poli Glenn

Es obvio que no es lo habitual. En la vida real hubiramos considerado guardar la ruta del fichero y no su contenido, estamos de acuerdo! pero el hecho de que precisamente no fuera sto lo habitual y el hecho tambin de que ambos supuestos sean asimilables de una forma sencilla, a efectos de nuestro cdigo, me hizo valorar que fuera mas conveniente y didctico usar el tipo blob, y guardar el contenido de la imagen en formato binario.
delphibasico.com/delphi/?p=3858

4/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

A fin de cuentas, desde nuestro servidor de datos, el cdigo que forma parte de ese mtodo que devuelve la imagen, puede ser modificado fcilmente, considerando un caso u otro. Mas abajo podis ver unas lineas forman parte de ese cdigo que veremos en la parte II. Considerad por ejemplo, en dichas lineas, el uso de LoadFromFile( ) en lugar de WriteData( ), si es que conocemos la ruta en la que est ubicada la imagen y que previamente hemos ledo en la bbdd de un supuesto campo Ruta (varchar), en el que podramos tener guardada la ruta de cada imagen.

Stephens La Web de Seoane Legin Delphi Luis Felipe Gonzlez Torres Embarcadero MVP Puro Cdigo Blog de Jos Castillo Rescatando a Delphi

COMUNIDAD
Recursos en la Red Publicaciones Truco o trato Foros

Stackoverflow en espaol

. . . s t r e a m: =T M e m o r y S t r e a m . C r e a t e ;

s t r e a m . W r i t e D a t a ( A S Q L Q u e r y . F i e l d B y N a m e ( ' B a n n e r ' ) . A s B y t e s ,

L e n g t h ( A S Q L Q u e r y . F i e l d B y N a m e ( ' B a n n e r ' ) . A s B y t e s ) ) ; . . . s t r e a m . S e e k ( 0 ,S y s t e m . C l a s s e s . T S e e k O r i g i n . s o B e g i n n i n g ) ; Software: de

Mexico para el mundo

Lo veremos en esa segunda parte. En el ejemplo, nuestra base de datos se llama DEMOS.GDB y la tenis ubicada en el directorio BBDD del cdigo fuente. No obstante, por si existe quien desee probarlo en sql server en lugar de Interbase, he incluido ambos scripts, y podemos con un pequeo ajuste de los parmetros de conexin de datos apuntar hacia el respectivo motor. son pocos los cambios que habra que hacer y por ello lo dejo a criterio vuestro. script interbase script sqlserver

Waooo Delphi!

Embarcadero
Uso del componente TListView en nuestras aplicaciones mviles mayo 16, 2013 Jos Prez Le Dev du Jeudi Episode 11 mayo 16, 2013 tlaborde Ven a verme en Ciudad de Mxico y Guadalajara mayo 16, 2013 Anders Ohlsson RAD Studio XE4 Whats
5/17

Embarcadero MVP
Adriano Santos Alan Fletcher Alan Glei Alexander Alexeev Alexander Bozhko Alister Christie Andrey Terekhov Bob Swart

Gestionar el contenido
Vamos a considerar solo dos operaciones bsicas: insertar una imagen y eliminarla, ya que no existen campos que contengan detalles de la imagen, ni ttulo
delphibasico.com/delphi/?p=3858

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

ni informacin asociada a la misma y no tiene demasiado sentido una operacin para actualizar. No somos chulos ni na!

Brian Long Bruno Fierens Caique Rodrigues

new in the IDE (X) Info.plist mayo 16, 2013 Jose Leon Getting TWebBrowser on iOS to zoom mayo 15, 2013 Anders Ohlsson Report do Delphi Tour Multi-Device: Porto Alegre mayo 15, 2013 Fernando Rizzato Delphi for iOS in Zagreb, Croatia mayo 15, 2013 Pawel Glowacki iOS app dev with Delphi XE4 and FireMonkey 3 is a quantum leap beyond XE2 mayo 14, 2013 David Intersimone Report do Delphi Tour Multi-Device: Florianpolis mayo 14, 2013 Fernando Rizzato RAD Studio XE4 Whats new in the IDE (IX) Misc
6/17

Lo haremos de la siguiente forma. Vamos a crear dos procedimientos en la base de datos: uno que nos permita eliminar una imagen (a travs de su indice) e otro que nos permita insertarla. Para aadir una imagen no nos es necesario un ndice, considerando que est indice se va a crear como campo autoincremento y no es un campo editable, pero s que necesitamos obtenerlo a posterior, si deseamos situarnos en la posicin de registro correcta. Si buscis en el script citado anteriormente, se corresponden con las lineas, respectivamente. Eliminar una imagen:

Carlos Henrique Agnes Cary Jensen Daniel Wildt Daniel Wolf Danny Wind Didier Cabale Eliseo Gonzalez Felix Colibri Filip Lagrou

A L T E RP R O C E D U R EE L I M I N A R I M A G E N( I D B A N N E RI N T E G E R ) A S b e g i n d e l e t ef r o mB a n n e r sw h e r eI D B a n n e r=: I D B a n n e r ; s u s p e n d ; e n d ^

Francois Piette Germn Estvez Ruiz Guinther Pauli Jim McKeeth Jose Castillo

Insertar una imagen:

Juan Antonio Castillo

A L T E RP R O C E D U R EI N S E R T A I M A G E N( B A N N E RB L O BS U B _ T Y P E0S E G M E N TS I Z E8 0 ) R E T U R N S( I D B A N N E RI N T E G E R ) A S b e g i n i d b a n n e r=g e n _ i d ( g e n _ b a n n e r s _ i d , 1 ) ; i n s e r ti n t ob a n n e r s( i d b a n n e r ,b a n n e r ) v a l u e s( : i d b a n n e r ,: b a n n e r ) ; s u s p e n d ;
delphibasico.com/delphi/?p=3858

Kelyn Pena Lachlan Gemmell Luciano Pimenta Luis Alfonso Rey

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

e n d ^

Luis Felipe Gonzlez T.

Changes mayo 14, 2013 Jose Leon

El procedimiento que elimina la imagen recibe como parmetro el indice (y clave primaria) de la tabla. No hace falta comentar mucho mas. El procedure que inserta, obtiene previamente el valor del indice que va a asignar el generador y lo utiliza como valor de retorno tras la insercin. Ese generador garantiza la condicin del indice de clave primaria en Interbase (o Firebird) En el caso de sqlserver es similar aunque no exactamente igual, dado que sqlserver considera de solo lectura la clave autoincremento y por ello habilita @@Identity() que nos devuelve el valor tras la insercin, de forma que tambin puede ser devuelto en el parmetro @ID.

Magnus Flysjo Marcelo Nogueira Marcelo Varela Marco Cantu Marco Santn Marcos Antonio Moreira Marcos P. Gomes Martin Strohal

EDN Visual
Video: Using the iOS TWebBrowser Component in Delphi iOS_WebBrowser Code Snippet mayo 12, 2013 Video: Using IBLite in Delphi iOS Apps mayo 10, 2013 Video: iOS SendCancelNotifications in Delphi mayo 8, 2013 Video: Using iOS AudioRecPlay in Delphi to Record and Play Back Sounds mayo 6, 2013 Video: Using iOS Location Services in Delphi apps mayo 4, 2013 Video: Using the iOS DatePicker in Delphi applications
7/17

C R E A T EP R O C E D U R Ed b o . I n s e r t a I m a g e n @ B a n n e rI M A G E , @ I DI n t e g e rO U T A S B E G I N I N S E R TI N T O d b o . b a n n e r s ( B a n n e r ) V A L U E S( @ B a n n e r ) S e t@ I D=@ @ I D E N T I T Y E N D G O

Mike Sutton Newton Gaucho Nick Hodges | A man's got to know his limitations Nirav Kaku Olaf Monien Pedro Bento Radek Cervinka

En este punto y ya comentado todo esto, habis podido optar, o bien por recrear la base de datos con los scripts, sea con uno o con otro, o bien utilizar directamente el fichero ya creado en el cdigo fuente. Sea cual sea vuestra decisin, podemos pasar al entorno y empezar a ver el cdigo de la aplicacin. Partimos de que el servicio
delphibasico.com/delphi/?p=3858

Ray Konopka Ricardo Boaro Robert Love Salvador Jover Samuel David

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

de la bbdd est en ejecucin. Descarga del cdigo fuente del ejemplo

Uwe Raabe Victory Fernandes

with TCalendarEdit mayo 2, 2013 Get Set Up for Delphi XE4 iOS Development abril 30, 2013 Video: Build Your First Multi-Device Delphi App abril 28, 2013 Building a C++ multi-tier master/detail Customer and Sales database application abril 26, 2013 Using the

Disear con el nuevo editor de LiveBindings


A partir de aqu, y tras descargar y descomprimir el fichero zip, podis ya en el entorno de Delphi XE3 abrir el grupo del proyecto, db_imgdemo.groupproj, dentro de la carpeta imagenesdatasnap, que contendr finalmente todos los proyectos, incluido el servidor y el cliente. Ahora solo incluye este proyecto para no liaros.

Vladislav Bajenov Xavier Martinez Zarko Gajic

Foros Hispanos
Club Delphi

Comunidad Delphiaccess

Sitio oficial y Partners

Boost C++11 Algorithms Library with the C++Builder 64-bit compiler abril 26, 2013

Danysoft

Embarcadero

En el formulario se han aadido los controles mnimos para gestionar el contenido de la tabla (ni siquiera he creado un datamodule para albergar los componentes de conexion a datos que viene a ser lo habitual). Un componente TImage que visualizar la imagen, una navegador (TBindNavigator) que nos permita desplazarnos en los distintos registros y un par de botones para ejecutar los mtodos que
delphibasico.com/delphi/?p=3858

Programa Certificacin Delphi

Programa de Certificacion de Delphi

8/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

insertarn o eliminarn las imgenes. Tambin hacemos uso de acciones, para controlar que sea accesible el mtodo que elimina la imagen, en funcin de que existan registros en la tabla. El componente TComboBox, realmente no hace nada. Lo he dejado por si optais por aadir ambos servicios, ya que en un primer momento, testeaba el primer codigo que habia escrito en ambos servidores seleccionando la conexion adecuada con el evento OnChange( ) del componente. Finalmente suprim dicho cdigo para que fuera mas claro el ejemplo. Es decir, nos podra servir para cambiar la conexin y apuntar al servidor adecuado (ejecutando tambin los mtodos que correspondan ya que puede ser ligeramente distinta la parametrizacin y su ndice nos puede ayudar en otro punto del programa a discrimar que debo hacer en cada caso). Hago una observacin para que no pase inadvertida para quien se inicia o lleva poco tiempo. Con este planteamiento (usar procedures), no me ha hecho falta confirmar los cambios sino que nos limitaremos a refrescar el contenido del dataset (tras la ejecucin del oportuno procedimiento). Respecto al modo en el que los distintos controles se enlazan a la fuente de datos, nos basta abrir el diseador de relaciones de LiveBindings y veremos que es muy sencillo crear estas relaciones. Algo tan sencillo como arrastrar entre las entidades que nos muestra el editor (cuando sean compatibles). Lo resalto porque se ha mejorado mucho y media un abismo desde aquel primer editor de relaciones que nos obligaba a configurar manualmente las equivalencias y el sentido de asignacin. Ahora mismo, con XE3, bastan un par de clicks (aunque sigue existiendo la posibilidad de extender el uso y crear relaciones complejas). Veamos como qued el editor tras hacer las
delphibasico.com/delphi/?p=3858

Niveles: 1. Delphi Certified Developer 2. Delphi Certified Master Developer

Estadisticas

Inicio: 08/03/2012 Estadsticas anteriores Delphi Bsico . 2003-2013 La fe no es la simple aceptacin de unas verdades abstractas, sino una relacin ntima con Cristo que nos lleva a abrir nuestro corazn a este misterio de amor y a vivir como personas que se saben amadas por Dios. Benedicto XVI

9/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

conexiones

Un poco de cdigo
Podis ejecutar el proyecto (F9) para ver nuestra rudimentaria utilidad en funcionamiento y comentamos.

delphibasico.com/delphi/?p=3858

10/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

Este es el cdigo de la unidad:

u n i tU M a i n ; i n t e r f a c e u s e s S y s t e m . S y s U t i l s ,S y s t e m . T y p e s ,S y s t e m . U I T y p e s ,S y s t e m . R t t i ,S y s t e m . C l a s s e s , S y s t e m . V a r i a n t s ,F M X . T y p e s ,F M X . C o n t r o l s ,F M X . F o r m s ,F M X . D i a l o g s , D a t a . D B X M S S Q L ,D a t a . B i n d . E n g E x t ,F m x . B i n d . D B E n g E x t ,S y s t e m . B i n d i n g s . O u t p u t s , F m x . B i n d . E d i t o r s ,D a t a . B i n d . C o m p o n e n t s ,D a t a . B i n d . D B S c o p e ,D a t a . D B , F M X . L a y o u t s ,F m x . B i n d . N a v i g a t o r ,D a t a s n a p . D B C l i e n t ,S i m p l e D S ,F M X . O b j e c t s , D a t a . S q l E x p r ,S y s t e m . A c t i o n s ,F M X . A c t n L i s t ,D a t a . F M T B c d ,D a t a . D B X I n t e r B a s e , F M X . L i s t B o x ; t y p e T f r m B a n n e r s=c l a s s ( T F o r m ) I m a g e 1 :T I m a g e ; b a n n e r s :T S i m p l e D a t a S e t ; b a n n e r s I D B a n n e r :T I n t e g e r F i e l d ; L a b e l 1 :T L a b e l ; B i n d S o u r c e D B 1 :T B i n d S o u r c e D B ; B i n d i n g s L i s t 1 :T B i n d i n g s L i s t ; L i n k P r o p e r t y T o F i e l d 1 :T L i n k P r o p e r t y T o F i e l d ; O p e n D i a l o g 1 :T O p e n D i a l o g ; a c c i o n e s :T A c t i o n L i s t ;
delphibasico.com/delphi/?p=3858 11/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

B u t t o n 1 :T B u t t o n ; a c I n s e r t a r I m a g e n :T A c t i o n ; B i n d N a v i g a t o r 1 :T B i n d N a v i g a t o r ; a c E l i m i n a r I m a g e n :T A c t i o n ; B u t t o n 2 :T B u t t o n ; L i n k P r o p e r t y T o F i e l d 2 :T L i n k P r o p e r t y T o F i e l d ; b a n n e r s B a n n e r :T B l o b F i e l d ; c b x S e l e c t o r :T C o m b o B o x ; L i s t B o x I t e m 1 :T L i s t B o x I t e m ; L i s t B o x I t e m 2 :T L i s t B o x I t e m ; L a b e l 2 :T L a b e l ; d e m o s _ I n t e r b a s e :T S Q L C o n n e c t i o n ; s p I n s e r t a r I m a g e n _ I n t e r b a s e :T S Q L S t o r e d P r o c ; s p E l i m i n a r I m a g e n _ I n t e r b a s e :T S Q L S t o r e d P r o c ; p r o c e d u r eF o r m C r e a t e ( S e n d e r :T O b j e c t ) ; p r o c e d u r ea c I n s e r t a r I m a g e n E x e c u t e ( S e n d e r :T O b j e c t ) ; p r o c e d u r ea c E l i m i n a r I m a g e n E x e c u t e ( S e n d e r :T O b j e c t ) ; p r o c e d u r ea c E l i m i n a r I m a g e n U p d a t e ( S e n d e r :T O b j e c t ) ; p r o c e d u r ec b x S e l e c t o r C h a n g e ( S e n d e r :T O b j e c t ) ; p r i v a t e {P r i v a t ed e c l a r a t i o n s} f u n c t i o nI n s e r t a r I m a g e n ( A I m a g e :T I m a g e ) :I n t e g e r ; p r o c e d u r eE l i m i n a r I m a g e n ( A I D B a n n e r :I n t e g e r ) ; p u b l i c {P u b l i cd e c l a r a t i o n s} e n d ; v a r f r m B a n n e r s :T f r m B a n n e r s ; i m p l e m e n t a t i o n { $ R* . f m x } u s e sI n i F i l e s ; p r o c e d u r eT f r m B a n n e r s . F o r m C r e a t e ( S e n d e r :T O b j e c t ) ; v a r s P a t h :S t r i n g ; b e g i n w i t hT I N I F i l e . C r e a t e ( E x t r a c t F i l e P a t h ( P a r a m S t r ( 0 ) ) + ' b b d d . i n i ' )d o b e g i n t r y s P a t h : =R e a d S t r i n g ( ' D a t a b a s e ' , ' P A T H _ B B D D ' , ' ' ) ; i f( T r i m ( s P a t h )=' ' )t h e n b e g i n i fO p e n D i a l o g 1 . E x e c u t et h e n s P a t h : =O p e n d i a l o g 1 . F i l e N a m e e l s er a i s eE x c e p t i o n . C r e a t e ( ' E sn e c e s a r i of i j a rl ac o n e x i nab b d d ' ) ; W r i t e S t r i n g ( ' D a t a b a s e ' , ' P A T H _ B B D D ' ,s P a t h ) ; e n d ;
delphibasico.com/delphi/?p=3858 12/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

d e m o s _ i n t e r b a s e . P a r a m s . V a l u e s [ ' D a t a b a s e ' ]: =s P a t h ; f i n a l l y F r e e ; e n d ; e n d ; b a n n e r s . O p e n ; e n d ; f u n c t i o nT f r m B a n n e r s . I n s e r t a r I m a g e n ( A I m a g e :T I m a g e ) :I n t e g e r ; v a r F S t r e a m :T M e m o r y S t r e a m ; b e g i n R e s u l t : =1 ; F S t r e a m : =T M e m o r y S t r e a m . C r e a t e ; t r y A I m a g e . B i t m a p . S a v e T o S t r e a m ( F S t r e a m ) ; c a s ec b x S e l e c t o r . I t e m I n d e xo f 0 :b e g i n s p I n s e r t a r I m a g e n _ I n t e r b a s e . E x e c P r o c ; R e s u l t : =s p I n s e r t a r I m a g e n _ I n t e r b a s e . P a r a m s . P a r a m B y N a m e ( ' I D B a n n e r ' ) . A s I n t e g e r ; e n d ; 1 :b e g i n / / e n d ; e n d ; f i n a l l y F r e e A n d N i l ( F S t r e a m ) ; e n d ; e n d ; p r o c e d u r eT f r m B a n n e r s . a c E l i m i n a r I m a g e n E x e c u t e ( S e n d e r :T O b j e c t ) ; b e g i n i fM e s s a g e d l g ( ' D e s e a se l i m i n a rl ai m a g e n ? ' ,S y s t e m . U I T y p e s . T M s g D l g T y p e . m t W a r n i n g, F M X . D i a l o g s . m b Y e s N o ,0 )=m r Y e s t h e n b e g i n E l i m i n a r I m a g e n ( b a n n e r s . F i e l d B y N a m e ( ' I D B a n n e r ' ) . A s I n t e g e r ) ; B a n n e r s . R e f r e s h ; e n d ; e n d ; p r o c e d u r eT f r m B a n n e r s . a c E l i m i n a r I m a g e n U p d a t e ( S e n d e r :T O b j e c t ) ; b e g i n a c E l i m i n a r I m a g e n . E n a b l e d : =n o tb a n n e r s . I s E m p t y ; e n d ; p r o c e d u r eT f r m B a n n e r s . a c I n s e r t a r I m a g e n E x e c u t e ( S e n d e r :T O b j e c t ) ; v a ri :I n t e g e r ; b e g i n i fO p e n D i a l o g 1 . E x e c u t et h e n b e g i n


delphibasico.com/delphi/?p=3858 13/17

s p I n s e r t a r I m a g e n _ I n t e r b a s e . P a r a m s . P a r a m B y N a m e ( ' B a n n e r ' ) . L o a d F r o m S t r e a m ( F S t r e a m ,f t

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

I m a g e 1 . B i t m a p . L o a d F r o m F i l e ( O p e n D i a l o g 1 . F i l e N a m e ) ; i : =I n s e r t a r I m a g e n ( I m a g e 1 ) ; B a n n e r s . R e f r e s h ; i fi > 0t h e nb a n n e r s . L o c a t e ( ' I D B a n n e r ' ,i ,[ ] ) ; e n d ; e n d ; p r o c e d u r eT f r m B a n n e r s . c b x S e l e c t o r C h a n g e ( S e n d e r :T O b j e c t ) ; b e g i n b a n n e r s . C l o s e ; d e m o s _ i n t e r b a s e . C o n n e c t e d : =F a l s e ; c a s ec b x S e l e c t o r . I t e m I n d e xo f 0 :b e g i n b a n n e r s . C o n n e c t i o n : =d e m o s _ i n t e r b a s e ; e n d ; 1 :b e g i n r a i s eE x c e p t i o n . C r e a t e ( ' P r u e b ac o no t r a sb a s e sd ed a t o sa q u . ' ) ; e n d ; e n d ; b a n n e r s . O p e n ; e n d ; p r o c e d u r eT f r m B a n n e r s . E l i m i n a r I m a g e n ( A I D B a n n e r :I n t e g e r ) ; b e g i n c a s ec b x S e l e c t o r . I t e m I n d e xo f 0 :b e g i n s p E l i m i n a r I m a g e n _ I n t e r b a s e . P a r a m s . P a r a m B y N a m e ( ' I D B a n n e r ' ) . V a l u e : =A I D B a n n e r ; s p E l i m i n a r I m a g e n _ I n t e r b a s e . E x e c P r o c ; e n d ; 1 :b e g i n / / e n d ; e n d ; e n d ; e n d .

Durante la creacin del formulario, nos aseguramos que est correctamente asignada la ruta a la base de datos (nuestro fichero gdb de Interbase), dado que desde aqu y en este momento no puedo saber en que lugar vais a ubicar el cdigo. Por ello, se lanza el cuadro de dialogo inicial que va a leer de un fichero ini, inicialmente vaco, en el que se guardar la ruta que habis elegido.

delphibasico.com/delphi/?p=3858

14/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

Si todo esto es correcto, se procede a abrir la tabla de imgenes y nuestro botn Eliminar queda activado en funcin de que existan registros en la tabla. Ambos botones, Insertar y Eliminar se vinculan a su respectiva accin como se puede apreciar. En la parte privada de la clase hemos declarado dos funciones para cada mtodo, invocados desde el evento que representa la ejecucin de la accin. As, la ejecucin de eliminar se apoyara en el valor del indice entero IDBanner del registro activo, para saber cual imagen vamos a borrar (previo al adecuado mensaje de dialogo que asegura que realmente nuestro usuario desea borrar).

E l i m i n a r I m a g e n ( b a n n e r s . F i e l d B y N a m e ( ' I D B a n n e r ' ) . A s I n t e g e r ) ;

Y la imagen activa, igualmente, servir como parmetro en la funcin que ejecuta la insercin. AImage, en el interior de la funcin InsertarImagen( ), representa el parmetro que ha recibido la funcin tras la eleccin previa de nuestro usuario del fichero grfico que desea insertar.

. . . F S t r e a m : =T M e m o r y S t r e a m . C r e a t e ; t r y A I m a g e . B i t m a p . S a v e T o S t r e a m ( F S t r e a m ) ; c a s ec b x S e l e c t o r . I t e m I n d e xo f 0 :b e g i n s p I n s e r t a r I m a g e n _ I n t e r b a s e . E x e c P r o c ; R e s u l t : =s p I n s e r t a r I m a g e n _ I n t e r b a s e . P a r a m s . P a r a m B y N a m e ( ' I D B a n n e r ' ) . A s I n t e g e r ; e n d ; . . .

s p I n s e r t a r I m a g e n _ I n t e r b a s e . P a r a m s . P a r a m B y N a m e ( ' B a n n e r ' ) . L o a d F r o m S t r e a m ( F S t r e a m ,f t

El resultado de la ejecucin del procedimiento en la


delphibasico.com/delphi/?p=3858 15/17

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

base de datos, ser el ndice de la imagen tras la insercin y nos apoyaremos en este retorno para localizar dicho registro tras refrescar el dataset, para que sean visibles los cambios. Si todo va bien, si el servicio se ejecuta y est escuchando adecuadamente en el puerto, si habis seleccionado correctamente la base de datos, etc. la aplicacin mostrar unas cuantas imgenes en una tabla que podis recorrer mediante el navegador. Ahora, una vez hecho todo esto, podemos pasar a crear el servidor y el cliente de datasnap, que era realmente nuestro objetivo cuando empezamos a escribir la entrada. Sencillo, no? Lo vemos en la segunda parte.

Tw ittear 0 Comprtelo:

Like

Send

Facebook 4 LinkedIn 3 Imprimir

Twitter 1

Google +1

Correo electrnico Ms

delphi xe3

FireMonkey

imagen

livebindings

Did you like this article? Share it with your friends!


Like 4 Tw ittear 1 0

Deja un comentario
Tu direccin de correo electrnico no ser publicada. Los campos necesarios estn marcados *

Nombre

*
16/17

delphibasico.com/delphi/?p=3858

16/05/13

Dar una buena imagen! Parte I | Delphi Bsico

Correo

electrnico Web

7 = dos

Comentario

Puedes usar las siguientes etiquetas y atributos HTML: < a h r e f = " "t i t l e = " " >< a b b rt i t l e = " " >< a c r o n y mt i t l e = " " > < b >< b l o c k q u o t ec i t e = " " >< c i t e >< c o d e >< d e l d a t e t i m e = " " >< e m >< i >< qc i t e = " " >< s t r i k e >< s t r o n g >

Publicar comentario

Spam Protection by WP-SpamFree

Recibir un email con los siguientes comentarios a esta entrada. Recibir un email con cada nuevo post.

2013 Delphi Bsico

Powered by Pinboard Theme by One Designs and WordPress

delphibasico.com/delphi/?p=3858

17/17

También podría gustarte