Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 19
gulder Va por buen camino
Thumbs up Cargar imágenes en celdas de StringGrid dependiendo de una consulta en tiempo de eje

Hola foro como andan espero que bien, con el siguiente codigo cargo imagenes en las celdas de un StringGrid

Código Delphi [-]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Ancho,Posicion: Integer;
begin
  Ancho := StringGrid1.ColWidths[2] div 2;
  Posicion := Ancho - (Image1.Picture.Width div 2);
  if (ARow = 3) and (ACol = 2) then
    with StringGrid1.Canvas do
      Draw(Rect.Left+Posicion, Rect.Top, Image1.Picture.Graphic);
end;

Este codigo lo hace bien el problema es que con este código las cargo cuando se ejecuta mi aplicación, y yo quiero cambiar dichas imágenes dependiendo una consulta que hago a una base de datos, pero no se como llamar dicho evento para que cargue mis imágenes cuando realizo la consulta, la consulta ya esta bien lo que quiero que me digan es como rellenar las celdas del StringGrid desde la consulta con las imagenes saludos gulder-gan
Responder Con Cita
  #2  
Antiguo 11-12-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola,

Algo sencillo....

Código Delphi [-]
function MaidSt(datoabuscar:string):integer;
begin
  //Consulta X que regresa un entero, por ejemplo
end;

begin
  Case MaidSt(StringGrid1.Cells[0,ARow]) of
     3 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image2.Picture.Graphic);
     4 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image3.Picture.Graphic);
     5 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image1.Picture.Graphic);
  end;
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 11-12-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 19
gulder Va por buen camino
Thumbs up

Hola egostar gracias por responder, bueno la forma en que me colocas tu respuesta no la entendi muy bien por eso te coloco mi consulta, quiero que sepas que cuando yo hago la consulta la imagen que traigo la guardo al disoc y la cargo en un Timage y despues de este Timage la trato de cargar a las celdas que corresponde aqui esta mi consulta

Código Delphi [-]
procedure TForm1.CargarImagenesLink();
var
id:string;
i:integer;
LmsImagen: TADOBlobStream;
Rect: TRect;
State: TGridDrawState;
ancho,Posicion: Integer;
begin
//
      with form1.ADOQuery2 do
      begin

        //hallamos el id del tema al cual le bamos a cargar la imagenes
       Active:=false;
       sql.Text:= 'select id from Post'+
                  ' where Titulo ='+char(39)+Trim(NextGrid1.Cells[1,Grow])+char(39);
       Active := true;
       id := Fields.Fields[0].AsString;

       //traemos el link y las imagens del tema seleccionado
       Active:=false;
       sql.Text:= 'SELECT  temas_posteados.link,Foros.imagen  from  temas_posteados, foros'+
                  ' where temas_posteados.id_foros = Foros.id_foros and  temas_posteados.id ='+id;
       Active := true;

       ListBox1.Clear;

             for  i:=0  to recordcount-1 do
             begin
              //aqui cargho el link del tema en un litbox
              ListBox1.Items.Add(Fields.Fields[0].AsString);

              //aqui si la imagen que garco no es null entro
                     If Not Fields.Fields[1].IsNull Then
                       Begin

                         //la imagen que cargo la guardo en el disco y la cargo en un Image Que esta en el form
                         LmsImagen := TADOBlobStream.Create(TBlobField(Fields.Fields[1]),bmRead);
                         LmsImagen.SaveToFile(ExtractFilePath(Application.ExeName)+'foto.jpg');
                         Image1.Picture.Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName)+'foto.JPG');

                         Ancho := StringGrid1.ColWidths[2] div 2;
                         Posicion := Ancho - (Image1.Picture.Width div 2);

                         //aqui debo cargar la imagen que esta en el Timage y mostrarla
                         //en laselda 

                       end;
              next;
             end;
     end;

end;

espero que mi codigo se entienda saludos gulder gan
Responder Con Cita
  #4  
Antiguo 11-12-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Hola,

Algo sencillo....

Código Delphi [-]
function MaidSt(datoabuscar:string):integer;
begin
//Consulta X que regresa un entero, por ejemplo
end;

begin
Case MaidSt(StringGrid1.Cells[0,ARow]) of
3 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image2.Picture.Graphic);
4 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image3.Picture.Graphic);
5 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image1.Picture.Graphic);
end;
end;
Lo que pasa amiguito es que el parametro Rect lo tiene en el evento OnDrawCell y el quiere colocar la imagen despues de hacer su consulta osea que no se estaría en el evento OnDrawCell.

Para hacer lo que pide lo que se me ocurre es obtener el TRect de la celda donde se quiere colocar la imagen, teniendo eso ya podemos dibujar la imagen dentro de esa celda.

En este ejemplo se coloca la imagen dentro de la fila y columna 2, tu debes adecuar a tu codigo.

Código Delphi [-]
var
 Rec : TRect;
begin
 Rec :=StringGrid1.CellRect(2,2);
 StringGrid1.Canvas.Draw(Rec.Left+34, Rec.Top, Image1.Picture.Graphic);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 11-12-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Caro Ver Mensaje
Lo que pasa amiguito es que el parametro Rect lo tiene en el evento OnDrawCell y el quiere colocar la imagen despues de hacer su consulta osea que no se estaría en el evento OnDrawCell.
Asi es amiguita, no coloque el nombre del evento OnDrawCell porque asumí que estabamos en ese evento, el "pintado" de las imagenes se hace en ese evento, aqui te muestro lo que yo hago.....

Código Delphi [-]
//Consulto es status de una habitación.
function TFcalendar.MaidSt(Habitacion:String):Integer;
begin
  With DataModule1.QMaidStatus do begin
    SQL.Text := 'SELECT STATUS FROM MAIDSTATUS WHERE HABITACION = "'+Habitacion+'"';
    Open;
    Result := fields[0].AsInteger;
    Close;
 end;
end;

//Asigno la imagen que le corresponde a la fila en base al status de la habitación
procedure TFcalendar.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  with Sender as TStringGrid do begin
    if (ACol=0) then begin
      Case MaidSt(StringGrid1.Cells[0,ARow]) of
         3 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image2.Picture.Graphic);
         4 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image3.Picture.Graphic);
         5 : StringGrid1.Canvas.Draw(Rect.Left+34, Rect.Top, Image1.Picture.Graphic);
      end;
    end;
  end;
end;

Salud ITOS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 11-12-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 19
gulder Va por buen camino
Thumbs up

Caro y egostar gracias por responder con la respuesta que me dio cara logre cargar las imagenes en las celdas del StringGrid el problema que tengo ahora es que si doi clic en una de las imagenes que se
encuentra en la celdas del StringGrid esta se borra y de igual manera si dimenciono el StringGrid el cual yo le doi la opcion al usuario de redimencionar se borra todas y no se por que espero alguna ayuda saluditos
Responder Con Cita
  #7  
Antiguo 11-12-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola

Eso es porque lo estas haciendo fuera del evento OnDrawCell, amigo gulder

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 11-12-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 19
gulder Va por buen camino
hola egostar yo de new por aqui bueno como veo que lo de caro no me resulta le estoy tirando cabeza un poco a tu codigo entonces quiero que me expliques que en caso de que el estado de alguna habitacion cambiara como haces para llamar a dicho evento para que repinte las imagenes saluditos y discupa por tanta molestadera
Responder Con Cita
  #9  
Antiguo 11-12-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por gulder Ver Mensaje
hola egostar yo de new por aqui bueno como veo que lo de caro no me resulta le estoy tirando cabeza un poco a tu codigo entonces quiero que me expliques que en caso de que el estado de alguna habitacion cambiara como haces para llamar a dicho evento para que repinte las imagenes saluditos y discupa por tanta molestadera
Hola

el "repintado" de las celdas se hace cuando realizas un cambio en el StringGrid, en mi caso lo que hago es modificar las casillas del StringGrid con algunos datos y automáticamente ejecuta el evento OnDrawCell, depende que es lo que estes haciendo.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
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
unir celdas en stringgrid voldemmor Varios 3 22-07-2008 22:07:55
StringGrid + celdas Makiley Varios 4 01-02-2006 14:01:15
Combinar Celdas Stringgrid MITOPE Varios 0 21-04-2004 08:03:27
bloquear celdas en un stringgrid ciscu Gráficos 1 18-12-2003 19:34:50
bloquear celdas en un stringgrid ciscu Varios 1 13-12-2003 05:41:54


La franja horaria es GMT +2. Ahora son las 13:21:59.


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
Copyright 1996-2007 Club Delphi