Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Componente de arrastrar (https://www.clubdelphi.com/foros/showthread.php?t=77836)

Caral 01-03-2012 20:32:30

Hola
Donde estan las fotos?.
Saludos

gianfranco_tont 01-03-2012 20:39:22

en la tabla de productos tengo un campo donde se guarda la ruta del del archivo jpg, la misma se esta colocando una carpeta es el servidor donde el nombre del archivo es igual a el código del producto .jpg

Caral 01-03-2012 20:45:56

Hola
Entonces estas usando un loadfromfile para traer la foto según el dato que tienes en el campo + el nombre del campo codigo.
Bueno, me parece bien, algo complicado, pero bien.
No tengo ningún ejemplo de eso, tendría que currarlo.
Esencialmente es sencillo.
Haces el filtro de la BD.
Traes la informacion al dbgrid.
Llamas al archivo de las fotos, las recorres y buscas los nombres que coincidan con los archivos de dataset (dbgrid).
Creas Un Tpanel y un TImagen en ejecucion con el tamaño que necesites y los presentas, vas aumentando el left para se vallan presentando, cuando lleguen a un top, automaticamete el srollbox creara el scrollbar.
Por ahi anta la cosa.
Saludos

gianfranco_tont 01-03-2012 20:59:13

si tienes otra forma mejor de guardar una foto en la tabla o cual seria la mejor opcion de hacerlo?
Ahora bien yo coloco el tpanel pero como hago para que la informacion de la tabla se vea en ella, tomando en cuenta que pueden ser 50, 60 o 30 productos dependiendo de la cosulta que le haga. como explique anteriormente voy utilizar el evento onchange de un edit.text y el la consulta del sql utilizare un like %''%.

Caral 01-03-2012 21:02:49

Hola
Con relacion a la foto esta bien que este en un directorio.
Con relacion a la informacion y el panel o frame y la imagen con la informacion tienes que crearla por ejecucion o tambien puedes colocar 100 paneles en el scrollbox con sus respectivos timage pero es algo sucio.
Saludos

Caral 01-03-2012 21:26:13

Hola
Este calendario lo hizo El Maestro Lepe.
Lo busque en el FTP pero no estaba asi que lo pongo otra vez, ademas de que te servira de ejemplo para lo que necesitas.
Saludos

gianfranco_tont 01-03-2012 23:00:02

lo estoy haciendo con un dbctrlgrid al parecer me esta reflejando lo que necesito apena estoy comenzando luego te cuento, lo que falta es adatar tu ejemplo para arrastrarlo a un dbgrid

roman 02-03-2012 02:00:19

Hola gianfranco_tont,

En mi opinión, el ejemplo que te esbozó ecfisa desde un principio es el camino a seguir. Tú quieres mostrar una banda de imágenes (y otra información) que provienen de una base de datos, por lo que la opción de usar un DBCtrlGrid es la más adecuada, ya que dicho control te facilita todo el desplazamiento y presentación de los datos.

Un pequeño inconveniente es que las imágenes las guardas en archivos fuera de la base de datos, por lo que no te vale colocar un DBImage. Pero no es un gran inconveniente. Coloca en su lugar un Image normal en el panel del DBCtrlGrid y en el evento OnPaintPanel del DBCtrlGrid cargas la imagen que corresponda:

Código Delphi [-]
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid; Index: Integer);
begin
  Image1.Picture.LoadFromFile(DBCtrlGrid.DataSource.DataSet['ruta']);
end;

Para arrastrar la imagen únicamente tienes que usar los eventos OnDragOver y OnDragDrop del DBGrid:

DragOver:
Código Delphi [-]
Accept := Source is TImage;

DragDrop:
Código Delphi [-]
Valor := DBCtrlGrid1.DataSource.DataSet.FieldByName('...').AsString;

Es decir, usas el valor del campo del dataset como requieras.

Para iniciar el arrastre, ecfisa usó el evento OnMouseDown del (DB)Image, pero tiene un problema, y es que debes seleccionar primero el panel deseado y luego hacer el arrastre. Es decir, si intentas arrastrar directamente un panel que no está seleccionado no se puede, o al menos es lo que he observado.

Para remediar esto basta que uses el evento OnMouseDown del DBCtrlGrid y ahí hagas lo mismo:

Código Delphi [-]
Image1.BeginDrag(true);

// Saludos

gianfranco_tont 02-03-2012 02:28:48

Eso es justamente lo que quiero pedir de su ayuda ya que efectivamente quiero guardar la imagen en la tabla de productos pero no se como hacerla, que tipo de campo crear y como hago finalmente para guardarla. Si tienen algun ejemplo eso me ayudaria mucho mi bd en sql 2008 y esto trabajando con delphi 2009

Caral 02-03-2012 02:35:28

Hola
Aqui te dejo otro ejemplo para que juegues un rato.
Este ejemplo crea dentro del scrollBox los paneles, las imágenes y los label (en ejecución).
Espero que con esto y todos los demás ejemplos puedas ir armando tu sistema.
Ojala te sirva de algo.
Saludos
PD: He tenido que poner el enlace por que el tamaño del archivo no me deja subirlo aquí.

gianfranco_tont 02-03-2012 14:54:38

gracias caral, aun veo como mejor opción tener las fotos en la base de datos, si tienes un ejemplo de eso si me ayudaria muchissimo, ya que no se que campo crear en la tabla para que me almacene la foto y si este campo funciona igual a cualquier otro para guardar la foto en el.

Caral 02-03-2012 17:12:26

Hola
Tengo ejemplos de eso pero al contener las fotos en la BD excede el espacio limitado.
Aqui te pongo el código para que lo veas:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, DB, ADODB,  DBCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    Button2: TButton;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    OpenPictureDialog1: TOpenPictureDialog;
    Button3: TButton;
    Image2: TImage;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses jpeg;

var jpg: TJPEGImage;

procedure TForm1.FormCreate(Sender: TObject);
Var BaseDeDatos, ConStr : String;

begin
   // Obtiene la ruta y el nombre de la base de datos
   BaseDeDatos := ExtractFilePath(Application.ExeName)+'xxx.MDB';
   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source='+BaseDeDatos+';'+
             'Persist Security Info=False;'+
             'Jet OLEDB:Database Password=admin';
   ADOConnection1.ConnectionString := ConStr;
   ADOConnection1.Open;

 jpg := TJPEGImage.Create;        // Creamos el objeto que "entiende" al JPEG

end;

procedure TForm1.Button2Click(Sender: TObject);
var  Stream: TStream;
begin
 ADOTable1.Open;                 // Abrimos la tabla
 ADOTable1.Last;                 // Nos vamos a la última tupla para ver la ultima imagen añadida.
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image2.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

 end;

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var  Stream: TStream;
begin
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image2.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

end;

procedure TForm1.Button3Click(Sender: TObject);
var bmp: TBitmap; Stream: TStream;
begin
 if not OpenPictureDialog1.Execute then Exit;
 jpg.LoadFromFile(OpenPictureDialog1.FileName);
 ADOTable1.Open;                  // Abrimos la tabla
 ADOTable1.Insert;                // Insertamos una nueva tupla
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmWrite); // Asignamos el BLOB a un stream
 jpg.SaveToStream(Stream);        // y guardamos la imagen como JPEG (convertido), en el stream
 Stream.Destroy;                  // liberamos.
 ADOTable1.Post;
end;

end.
Saludos

gianfranco_tont 02-03-2012 18:17:57

ok ya guarde la imagen en la base de datos, creo que como estoy trabajando con sql no creo que debo tener limitaciones o si?

Ahora la guarde pero como hago para que el dbimage me la muestre?

roman 02-03-2012 19:45:16

1 Archivos Adjunto(s)
Cita:

Empezado por gianfranco_tont (Mensaje 426705)
Ahora la guarde pero como hago para que el dbimage me la muestre?

Hasta donde recuerdo, no se puede. Quizá me equivoque pero creo que el DBImage sólo trabaja con bitmaps.

De todas formas, por si te sirve, te pongo un ejemplo usando la técnica que te esbocé, es decir, con las imágenes en archivos separados. El zip contiene un ejecutable, pero sólo podras usarlo si tienes delphi 7. En caso contrario, tendrás que abrir y compilar el proyecto.

// Saludos

gianfranco_tont 03-03-2012 15:18:29

Cita:

Empezado por Caral (Mensaje 426545)
Hola
Con esto de mover componentes me acorde del maestro Neftali y un ejemplo muy bueno que hizo.
Con su código he hecho este pequeño juego.:)
Con el mouse (click Derecho) tomad la imagen y arrastrarla al dbgrid.;):D
Saludos

caral, ya pude resolver que la imagen se guardara en la tabla y ahora si puedo ver toda la informacion en el DBctrlgrid perfectamente, me copie lo que necesite de tu aplicacion y puedo arrastrar la foto que esta dentro del DBctrlgrid pero ahora tengo un problemita la imagen no sale del DBctrlgrid para llevarla al dbgrid.

como pudiera solucionar eso?

gianfranco_tont 12-03-2012 01:22:36

Cita:

Empezado por gianfranco_tont (Mensaje 426768)
caral, ya pude resolver que la imagen se guardara en la tabla y ahora si puedo ver toda la informacion en el DBctrlgrid perfectamente, me copie lo que necesite de tu aplicacion y puedo arrastrar la foto que esta dentro del DBctrlgrid pero ahora tengo un problemita la imagen no sale del DBctrlgrid para llevarla al dbgrid.

como pudiera solucionar eso?

Alguien tiene alguna idea como ayudar con esto?

gianfranco_tont 12-03-2012 20:40:54

Cita:

Empezado por gianfranco_tont (Mensaje 427377)
Alguien tiene alguna idea como ayudar con esto?

Código Delphi [-]
unit Unitcotizacion;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ExtCtrls, StdCtrls, DBCGrids, Mask, JPEG, DBCtrls, Buttons,
  Grids, DBGrids;

type
    TControlActual = Class(TControl);
  TFormcotizacion = class(TForm)
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    Edit1: TEdit;
    DBCtrlGrid1: TDBCtrlGrid;
    DBMemo1: TDBMemo;
    DBText3: TDBText;
    DBGrid1: TDBGrid;
    Button1: TButton;
    ADOQuery1co_art: TStringField;
    ADOQuery1art_des: TStringField;
    ADOQuery1fecha_reg: TDateTimeField;
    ADOQuery1manj_ser: TBooleanField;
    ADOQuery1co_lin: TStringField;
    ADOQuery1co_cat: TStringField;
    ADOQuery1co_subl: TStringField;
    ADOQuery1co_color: TStringField;
    ADOQuery1item: TStringField;
    ADOQuery1ref: TStringField;
    ADOQuery1modelo: TStringField;
    ADOQuery1procedenci: TStringField;
    ADOQuery1comentario: TMemoField;
    ADOQuery1co_prov: TStringField;
    ADOQuery1ubicacion: TStringField;
    ADOQuery1uni_venta: TStringField;
    ADOQuery1uni_compra: TStringField;
    ADOQuery1uni_relac: TFMTBCDField;
    ADOQuery1relac_aut: TIntegerField;
    ADOQuery1stock_act: TFMTBCDField;
    ADOQuery1stock_com: TFMTBCDField;
    ADOQuery1sstock_com: TFMTBCDField;
    ADOQuery1stock_lle: TFMTBCDField;
    ADOQuery1sstock_lle: TFMTBCDField;
    ADOQuery1stock_des: TFMTBCDField;
    ADOQuery1sstock_des: TFMTBCDField;
    ADOQuery1suni_venta: TStringField;
    ADOQuery1suni_compr: TStringField;
    ADOQuery1suni_relac: TBCDField;
    ADOQuery1sstock_act: TFMTBCDField;
    ADOQuery1relac_comp: TFMTBCDField;
    ADOQuery1relac_vent: TFMTBCDField;
    ADOQuery1pto_pedido: TFMTBCDField;
    ADOQuery1stock_max: TFMTBCDField;
    ADOQuery1stock_min: TFMTBCDField;
    ADOQuery1prec_om: TBooleanField;
    ADOQuery1prec_vta1: TFMTBCDField;
    ADOQuery1fec_prec_v: TDateTimeField;
    ADOQuery1fec_prec_2: TDateTimeField;
    ADOQuery1prec_vta2: TFMTBCDField;
    ADOQuery1fec_prec_3: TDateTimeField;
    ADOQuery1prec_vta3: TFMTBCDField;
    ADOQuery1fec_prec_4: TDateTimeField;
    ADOQuery1prec_vta4: TFMTBCDField;
    ADOQuery1fec_prec_5: TDateTimeField;
    ADOQuery1prec_vta5: TFMTBCDField;
    ADOQuery1prec_agr1: TFMTBCDField;
    ADOQuery1prec_agr2: TFMTBCDField;
    ADOQuery1prec_agr3: TFMTBCDField;
    ADOQuery1prec_agr4: TFMTBCDField;
    ADOQuery1prec_agr5: TFMTBCDField;
    ADOQuery1can_agr: TFMTBCDField;
    ADOQuery1fec_des_p5: TDateTimeField;
    ADOQuery1fec_has_p5: TDateTimeField;
    ADOQuery1co_imp: TStringField;
    ADOQuery1margen_max: TBCDField;
    ADOQuery1ult_cos_un: TFMTBCDField;
    ADOQuery1fec_ult_co: TDateTimeField;
    ADOQuery1cos_pro_un: TFMTBCDField;
    ADOQuery1fec_cos_pr: TDateTimeField;
    ADOQuery1cos_merc: TFMTBCDField;
    ADOQuery1fec_cos_me: TDateTimeField;
    ADOQuery1cos_prov: TFMTBCDField;
    ADOQuery1fec_cos_p2: TDateTimeField;
    ADOQuery1ult_cos_do: TFMTBCDField;
    ADOQuery1fec_cos_do: TDateTimeField;
    ADOQuery1cos_un_an: TFMTBCDField;
    ADOQuery1fec_cos_an: TDateTimeField;
    ADOQuery1ult_cos_om: TFMTBCDField;
    ADOQuery1fec_ult_om: TDateTimeField;
    ADOQuery1cos_pro_om: TFMTBCDField;
    ADOQuery1fec_pro_om: TDateTimeField;
    ADOQuery1tipo_cos: TStringField;
    ADOQuery1mont_comi: TBCDField;
    ADOQuery1porc_cos: TBCDField;
    ADOQuery1mont_cos: TBCDField;
    ADOQuery1porc_gas: TBCDField;
    ADOQuery1mont_gas: TBCDField;
    ADOQuery1f_cost: TDateTimeField;
    ADOQuery1fisico: TBooleanField;
    ADOQuery1punt_cli: TBCDField;
    ADOQuery1punt_pro: TBCDField;
    ADOQuery1dias_repos: TIntegerField;
    ADOQuery1tipo: TStringField;
    ADOQuery1alm_prin: TStringField;
    ADOQuery1anulado: TBooleanField;
    ADOQuery1tipo_imp: TStringField;
    ADOQuery1dis_cen: TMemoField;
    ADOQuery1mon_ilc: TFMTBCDField;
    ADOQuery1capacidad: TBCDField;
    ADOQuery1grado_al: TBCDField;
    ADOQuery1tipo_licor: TStringField;
    ADOQuery1compuesto: TBooleanField;
    ADOQuery1imagen: TBlobField;
    ADOQuery1picture: TBlobField;
    ADOQuery1codigo1: TStringField;
    ADOQuery1codigo2: TStringField;
    ADOQuery1codigo3: TStringField;
    ADOQuery1codigo4: TStringField;
    ADOQuery1codigo5: TStringField;
    ADOQuery1codigo6: TStringField;
    ADOQuery1codigo7: TStringField;
    ADOQuery1codigo8: TStringField;
    ADOQuery1co_us_in: TStringField;
    ADOQuery1fe_us_in: TDateTimeField;
    ADOQuery1co_us_mo: TStringField;
    ADOQuery1fe_us_mo: TDateTimeField;
    ADOQuery1co_us_el: TStringField;
    ADOQuery1fe_us_el: TDateTimeField;
    ADOQuery1revisado: TStringField;
    ADOQuery1trasnfe: TStringField;
    ADOQuery1co_sucu: TStringField;
    ADOQuery1rowguid: TGuidField;
    ADOQuery1tuni_venta: TStringField;
    ADOQuery1equi_uni1: TFMTBCDField;
    ADOQuery1equi_uni2: TFMTBCDField;
    ADOQuery1equi_uni3: TFMTBCDField;
    ADOQuery1lote: TBooleanField;
    ADOQuery1serialp: TStringField;
    ADOQuery1valido: TBooleanField;
    ADOQuery1atributo1: TBooleanField;
    ADOQuery1vatributo1: TStringField;
    ADOQuery1atributo2: TBooleanField;
    ADOQuery1vatributo2: TStringField;
    ADOQuery1atributo3: TBooleanField;
    ADOQuery1vatributo3: TStringField;
    ADOQuery1atributo4: TBooleanField;
    ADOQuery1vatributo4: TStringField;
    ADOQuery1atributo5: TBooleanField;
    ADOQuery1vatributo5: TStringField;
    ADOQuery1atributo6: TBooleanField;
    ADOQuery1vatributo6: TStringField;
    ADOQuery1garantia: TStringField;
    ADOQuery1peso: TFMTBCDField;
    ADOQuery1pie: TFMTBCDField;
    ADOQuery1margen1: TBCDField;
    ADOQuery1margen2: TBCDField;
    ADOQuery1margen3: TBCDField;
    ADOQuery1margen4: TBCDField;
    ADOQuery1margen5: TBCDField;
    ADOQuery1row_id: TBytesField;
    ADOQuery1imagen1: TStringField;
    ADOQuery1imagen2: TStringField;
    ADOQuery1i_art_des: TStringField;
    ADOQuery1uni_emp: TStringField;
    ADOQuery1rel_emp: TFMTBCDField;
    ADOQuery1movil: TBooleanField;
    ADOQuery1tot_costo: TFMTBCDField;
    DBImage1: TDBImage;
    DBText1: TDBText;
    DataSource2: TDataSource;
    ADOQuery2: TADOQuery;
    ADOQuery2fact_num: TIntegerField;
    ADOQuery2contrib: TBooleanField;
    ADOQuery2nombre: TStringField;
    ADOQuery2rif: TStringField;
    ADOQuery2nit: TStringField;
    ADOQuery2status: TStringField;
    ADOQuery2comentario: TMemoField;
    ADOQuery2descrip: TStringField;
    ADOQuery2saldo: TBCDField;
    ADOQuery2fec_emis: TDateTimeField;
    ADOQuery2fec_venc: TDateTimeField;
    ADOQuery2co_cli: TStringField;
    ADOQuery2co_ven: TStringField;
    ADOQuery2co_tran: TStringField;
    ADOQuery2dir_ent: TMemoField;
    ADOQuery2forma_pag: TStringField;
    ADOQuery2tot_bruto: TFMTBCDField;
    ADOQuery2tot_neto: TFMTBCDField;
    ADOQuery2glob_desc: TBCDField;
    ADOQuery2tot_reca: TBCDField;
    ADOQuery2porc_gdesc: TStringField;
    ADOQuery2porc_reca: TStringField;
    ADOQuery2total_uc: TBCDField;
    ADOQuery2total_cp: TBCDField;
    ADOQuery2tot_flete: TBCDField;
    ADOQuery2monto_dev: TBCDField;
    ADOQuery2totklu: TBCDField;
    ADOQuery2anulada: TBooleanField;
    ADOQuery2impresa: TBooleanField;
    ADOQuery2iva: TBCDField;
    ADOQuery2iva_dev: TBCDField;
    ADOQuery2feccom: TDateTimeField;
    ADOQuery2numcom: TIntegerField;
    ADOQuery2tasa: TFMTBCDField;
    ADOQuery2moneda: TStringField;
    ADOQuery2cta_contab: TStringField;
    ADOQuery2seriales: TIntegerField;
    ADOQuery2tasag: TFMTBCDField;
    ADOQuery2tasag10: TFMTBCDField;
    ADOQuery2tasag20: TFMTBCDField;
    ADOQuery2campo1: TStringField;
    ADOQuery2campo2: TStringField;
    ADOQuery2campo3: TStringField;
    ADOQuery2campo4: TStringField;
    ADOQuery2campo5: TStringField;
    ADOQuery2campo6: TStringField;
    ADOQuery2campo7: TStringField;
    ADOQuery2campo8: TStringField;
    ADOQuery2co_us_in: TStringField;
    ADOQuery2fe_us_in: TDateTimeField;
    ADOQuery2co_us_mo: TStringField;
    ADOQuery2fe_us_mo: TDateTimeField;
    ADOQuery2co_us_el: TStringField;
    ADOQuery2fe_us_el: TDateTimeField;
    ADOQuery2revisado: TStringField;
    ADOQuery2trasnfe: TStringField;
    ADOQuery2co_sucu: TStringField;
    ADOQuery2rowguid: TGuidField;
    ADOQuery2mon_ilc: TFMTBCDField;
    ADOQuery2otros1: TFMTBCDField;
    ADOQuery2otros2: TFMTBCDField;
    ADOQuery2otros3: TFMTBCDField;
    ADOQuery2aux01: TFMTBCDField;
    ADOQuery2aux02: TStringField;
    ADOQuery2salestax: TStringField;
    ADOQuery2origen: TStringField;
    ADOQuery2origen_d: TStringField;
    ADOQuery2sta_prod: TStringField;
    ADOQuery2telefono: TStringField;
    procedure LimitaMovimiento(Control:TControl);
    procedure Edit1Change(Sender: TObject);
    procedure MoveControl(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure DBImage1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Formcotizacion: TFormcotizacion;
  Const
   coma = #39;
   MARGEN = 8;  //8 Pixels

implementation
uses unit1;

{$R *.dfm}

procedure TFormcotizacion.LimitaMovimiento(Control:TControl);
//procedure de Radikal modificada
begin
  //Que no se salga horizontalmente:
  //if Control.Left < MARGEN then Control.Left:=MARGEN-7;
  //if Control.Left+Control.Width+MARGEN > Control.Parent.Width then
    //Control.Left:=(Control.Parent.Width-Control.Width)-MARGEN;
  //Ni Verticalmente
  //if Control.Top < MARGEN then Control.Top:=MARGEN;
  //if Control.Top > Control.Parent.Height-Control.Height-(MARGEN+19) then
  //  Control.Top:=(Control.Parent.Height-Control.Height)-(MARGEN+19);
  //if Control.Top > 140 then
  //Begin
  //if Control.Name = 'DBImage1' then
  //begin
  //DBImage1.Top:= 17;
  //DBImage1.Left:= 56;
  //end;
  //End;
end;


procedure TFormcotizacion.DBGrid1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
    Accept := Source is tImage;
end;

procedure TFormcotizacion.DBImage1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
      DbImage1.BeginDrag(true);
end;

procedure TFormcotizacion.Edit1Change(Sender: TObject);
begin
    if Edit1.Text <> '' then
      with ADOQuery1 do
      begin
      adoQuery1.Close;
      adoQuery1.Sql.Clear;
      adoQuery1.Sql.Add('Select * From art');
      adoQuery1.Sql.Add('where art_des like'+coma+'%'+Edit1.text+'%'+coma);
      adoquery1.Open;
      if adoQuery1.RecordCount  > 0 then
      begin
      try
      //Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'\IMAGEN\BOLSAS BLANCAS.JPEG');
      //Image1.Stretch:= True;
      except
      end;
      ADOQuery1.Close;
      adoQuery1.Sql.Clear;
      adoQuery1.Sql.Add('SELECT  TOP (200) imagen.art_des AS Expr149, imagen.foto, imagen.cod_art, art.co_art, art.art_des, art.uni_venta art ON imagen.cod_art = art.co_art');
      adoquery1.Open;
      //DBImage1.LoadPicture;
      LockWindowUpdate(0);

 end;
end;
end;

procedure TFormcotizacion.MoveControl(Sender:TObject; Button:TMouseButton;
          Shift:TShiftState; X,Y:Integer);
//procedure de Peter Morris modificada
var
  TempPanel: TPanel;
  Control: TControl;
begin
  //Aqui controlamos si debemos mover o no (ALT+Raton.BotonIzquierdo)
  //Pon la condición que quieras.
  //If (Not(ssAlt in Shift)) Then
  //Exit;
  // Releases the mouse capture from a window
  // Liberamos la captura de los eventos de raton de nuestra ventana
  ReleaseCapture;
  // If the component is a TWinControl, move it directly
  // Si el Control es del Tipo TWINCONTROL lo movemos directamente
  if Sender is TWinControl then
    Begin
      TWinControl(Sender).Perform(WM_SYSCOMMAND,$F012,0);
      LimitaMovimiento(TWinControl(Sender));
    End
   else//No es de tipo TWinControl
    try
      Control := TControl(Sender);
      TempPanel := TPanel.Create(Self);
      with TempPanel do
        begin
        //Replace the component with TempPanel
        //Incorporamos Un TPanel a la posicion donde esta el control
        Caption := '';
        BevelOuter := bvNone;
        SetBounds(Control.Left, Control.Top, Control.Width, Control.Height);
        Parent := Control.Parent;
        //Put our control in TempPanel
        //Metemos ese control en el panel temporal creado para la circunstancia
        Control.Parent := TempPanel;
        //Move TempPanel with control inside it
        //Ala, ya podemos mover el panel, ya que este si es de tipo TWinControl
        Perform(WM_SYSCOMMAND, $F012, 0);
        //Put the component where the panel was dropped
        //Una vez sabemos la posicion final del panel, la utilizamos para poner alli nuestro
        //control no-TWinControl
        Control.Parent := Parent;
        Control.Left := Left;
        Control.Top := Top;
        //LimitaMovimiento(Control);//controlamos que no se salga de la ventana.
      end;
    finally
      TempPanel.Free;
    end;
end;

procedure TFormcotizacion.FormCreate(Sender: TObject);
Var
  I : Integer;
  BaseDeDatos, ConStr : String;
begin
  For I:=0 To (ComponentCount-1) Do
    Begin
      If Components[i] Is TControl Then//Todos los controles, sean o no TWincontrol
        Begin
          TControlActual(Components[i]).OnMouseDown:=Movecontrol;
      End;
    End;
  //Esta instruccion hace que las ventanas muestren su contenido
  //cuando las movemos por el escritorio, y como los TWincontrol
  //no son más que "ventanitas", pues nos vale para poder mostrar
  //el contenido de los controles al moverlos.
  SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 1, nil, 0);
  //Create.AutoScroll:=FALSE;//para mejorar la "visibilidad"
  // conectamos con la BD
  // Obtiene la ruta y el nombre de la base de datos

end;

end.

Talvez esto pueda darle una idea del problema que tengo.

gianfranco_tont 13-03-2012 13:49:36

Cita:

Empezado por gianfranco_tont (Mensaje 426768)
caral, ya pude resolver que la imagen se guardara en la tabla y ahora si puedo ver toda la informacion en el DBctrlgrid perfectamente, me copie lo que necesite de tu aplicacion y puedo arrastrar la foto que esta dentro del DBctrlgrid pero ahora tengo un problemita la imagen no sale del DBctrlgrid para llevarla al dbgrid.

como pudiera solucionar eso?

El problema en realidad es que puedo arrastrar la imagen pero solo dentro del dbctrlgrid. Trato de explicarme mejor tengo un dbctrlgrid en la parte de arriba de un from y debajo tengo un dbgrid, yo deberia poder arrastrar la imagen desde el dbctrlgrig al dbgrid y en ese ultimo finalmente llenar el registro con los datos necesarios que provienen de una tabla en sql. Ahora bien no logro arrastrar la imagen desde el dbctrlgrid hasta el dbgrid ya que la imagen selecionada no sale del dbctrlgrid, solo puedo desplazarla dentro del mismo.

Caral 13-03-2012 16:40:08

Hola
No he usado el dbctrlgrid nunca.
Pregunto: El dbctrlgrid esta metido dentro de un panel u otro ?.
Saludos

gianfranco_tont 13-03-2012 16:53:01

No simplemente esta en el from.


La franja horaria es GMT +2. Ahora son las 03:50:21.

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