Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Poner una imagen encima de un grid (https://www.clubdelphi.com/foros/showthread.php?t=91192)

Sergio J. 29-11-2016 20:24:27

Poner una imagen encima de un grid
 
1 Archivos Adjunto(s)
Hola a todos:

He estado buscando información para superponer una imagen en un form que quede al estilo de la imagen adjunta...


...pero se queda por debajo de algunos objetos como TEdit, TDBGrid, y otros.

Agradecería una pista, gracias.

Un saludo.

Neftali [Germán.Estévez] 30-11-2016 10:20:15

1) Necesitas un contenedor donde colocar la imagen y que permanezca "OnTop". Por ejemplo un TPanel.
2) Hay bastantes implementaciones de un panel transparente. Por ejemplo, aquí tienes una que funciona.
(fuente http://stackoverflow.com/questions/1...el-transparent)

Código Delphi [-]
unit PanelTransparent;


interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TPanelTransparent = class (TPanel)
  private
    procedure CnCtlColorStatic (var Msg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;
    procedure WmEraseBkgnd (var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure Paint; override;
  protected
    procedure CreateParams (var Params: TCreateParams); override;
  end;

procedure Register;


implementation

procedure Register;
  begin
    RegisterComponents ('AppMic', [TPanelTransparent]);
  end;

procedure TPanelTransparent.CreateParams (var Params: TCreateParams);
  begin
    inherited CreateParams(Params);
    Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
  end;

procedure TPanelTransparent.WmEraseBkgnd(var Msg: TWMEraseBkgnd);
  begin
    Msg.Result := 1;
  end;

procedure TPanelTransparent.CnCtlColorStatic(var Msg: TWMCtlColorStatic);
  begin
    SetBKMode (Msg.ChildDC, TRANSPARENT);
    Msg.Result := GetStockObject (NULL_BRUSH);
  end;

procedure TPanelTransparent.Paint;
  begin
    SetBKMode (Handle, TRANSPARENT);
    //inherited;
  end;

end.

3) Luego creas una imagen con transparencia y la colocas dentro. Por ejemplo esta:
http://s26.postimg.org/woapk0pop/marca_agua_Trans.png

Con eso debería bastar.

http://s26.postimg.org/4pgjt5o21/Captura_2025.png

NOTA: Tendrás que lidiar con el repintado, pero eso ya es otro tema.

Neftali [Germán.Estévez] 30-11-2016 10:51:11

Estoy pensando que esto tendrá también un problema con los eventos de ratón, pues el panel sigue estando delante del Grid.
Te sirve para visualizar inicialmente, pero a la hora de trabajar con el grid, deberás ocultarlo/eliminarlo.

Sergio J. 30-11-2016 11:38:39

Gracias Neftali, probaré a insertar dicha unidad y en ella coloco la imagen.

No te preocupes por los eventos, ya que si se visualiza la imagen no se debe modificar el grid.

Gracias de nuevo y un saludo.


La franja horaria es GMT +2. Ahora son las 09:51:55.

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