Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2009
broly7 broly7 is offline
Miembro
 
Registrado: jun 2008
Posts: 43
Poder: 0
broly7 Va por buen camino
Smile Memo TRansparente?

Existe algún componente o alguna forma por código de hacer un memo con el fondo transaprente? Osea que se visualicen las letras y las scroll bars pero sin el fondo de color. (como un label)

Saludos.
Responder Con Cita
  #2  
Antiguo 02-12-2009
crespopg crespopg is offline
Miembro
 
Registrado: jul 2004
Ubicación: Texcoco, Edo. de Mexico, Mex.
Posts: 16
Poder: 0
crespopg Va por buen camino
respuesta a Memo transparente

Estimado;
broly7
Aqui mi propuesta a tu pregunta.
En la Propiedad de form1.TransparentColor:=true y
despues utilizar el color blanco como el color transparente,
y opcionalmente definir el color en blanco para form1.

form1.TransparentColor:=true;
form1.TransparentColorValue:=clWhite;
form1.Color:=ClWhite;

Memo TRansparente?
--------------------------------------------------------------------------------
Existe algún componente o alguna forma por código de hacer un memo con el fondo transaprente?
Osea que se visualicen las letras y las scroll bars pero sin el fondo de color. (como un label)
Saludos.
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
 form1.TransparentColor:=true;
 form1.TransparentColorValue:=clWhite;
 form1.Color:=ClWhite;
 form1.Memo1.Lines.LoadFromFile('ejemplo1.txt');
end;
end.
Archivos Adjuntos
Tipo de Archivo: zip memotrans.zip (5,6 KB, 16 visitas)
Responder Con Cita
  #3  
Antiguo 02-12-2009
broly7 broly7 is offline
Miembro
 
Registrado: jun 2008
Posts: 43
Poder: 0
broly7 Va por buen camino
Smile

Lo siento no sirve. Ya lo tenía como tu dices, en propiedades tengo:
Código Delphi [-]
form1.TransparentColor:=true;  
form1.TransparentColorValue:=clFuchsia; 
 form1.Color:=clFuchsia;

Entonces la form queda totalmente transparente pero le he puesto una imagen encima, y solo se ve la imagen ok?

Pero al poner el MEMO1 de color Fuchsia encima de la imagen, se me come toda la imagen quedando como en la imagen: h t t p : / /i46.tinypic.c om/2qxuy5s.png

Yo quiero que sea transparente pero que se vea la imagen de fondo. T_T
Responder Con Cita
  #4  
Antiguo 03-12-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Aqui te pongo el codigo de un componente (adaptado por mi) descendiente de TMemo que se pone trasparente cuando no tiene el foco..
Código Delphi [-]
unit AlphaMemo;
interface

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

const
  TWM_RGSInvalidate=WM_USER+1;

type
  TAlphaMemo=class(TMemo)
  private
    { Private declarations }
    procedure RgsInvalidate(var Message:TMessage); message
              TWM_RGSInvalidate;
    procedure CNCTLCOLOREDIT(var Message:TWMCTLCOLOREDIT); message
              CN_CTLCOLOREDIT;
    procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure WMMove(var Message: TMessage); message WM_MOVE;

  protected
    { Protected declarations }
    FTransparent: boolean;
    procedure CreateWnd; override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure DoExit; override;
    procedure DoEnter; override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    procedure Invalidate; override;

  published
    { Published declarations }
  end;

procedure Register;

implementation

constructor TAlphaMemo.Create(AOwner:TComponent);
begin
inherited create(AOwner);
   ftransparent:=true;
end;

procedure TAlphaMemo.CreateWnd;
begin
inherited CreateWnd;
   if fTransparent then
      begin
       SetWindowLong(Parent.Handle, GWL_STYLE,
       GetWindowLong(Parent.Handle, GWL_STYLE) and not WS_CLIPCHILDREN);
       end;
end;

procedure TAlphaMemo.RgsInvalidate(var Message:TMessage);
var r:TRect;
begin
  if (Parent<>nil) and FTransparent then
    begin
      r:=ClientRect;
      r.TopLeft:=Parent.ScreenToClient(ClientToScreen(r.TopLeft));
      r.BottomRight:=Parent.ScreenToClient(ClientToScreen(r.BottomRight));
      RedrawWindow(Handle,nil,0,RDW_FRAME+RDW_INVALIDATE);
    end;
end;

procedure TAlphaMemo.CNCTLCOLOREDIT(var Message:TWMCTLCOLOREDIT);
begin
  if FTransparent then
   with Message do
    begin
      SetBkMode(ChildDC,Windows.TRANSPARENT);
      Result:=GetStockObject(HOLLOW_BRUSH)
    end
   else inherited;
end;



procedure TAlphaMemo.WMEraseBkgnd(var Message:TWMERASEBKGND);
begin
  if FTransparent and not (csDesigning in ComponentState) then
      PostMessage(Handle,TWM_RGSInvalidate,0,0)
  else inherited;
end;

procedure TAlphaMemo.WMMove(var message:TMessage);
begin
inherited;
if FTransparent then SendMessage(Handle,TWM_RGSInvalidate,0,0)
  else Invalidate;
end;

procedure TAlphaMemo.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
if (CsDesigning in ComponentState) then exit;
    with Params do
      begin
   ExStyle:=ExStyle or WS_EX_TRANSPARENT;
      end;
end;

procedure TAlphaMemo.DoExit;
begin
inherited;
   FTransparent:=true;
   SetCursor(0);
   RecreateWnd;
end;

procedure TAlphaMemo.DoEnter;
var ExStyle,StdStyle:longint;
begin
inherited;
Ftransparent:=False;
StdStyle:= Windows.GetWindowLong(handle, GWL_EXSTYLE);
ExStyle:= StdStyle and not WS_EX_TRANSPARENT;
Windows.SetWindowLong(Handle, GWL_EXSTYLE, exStyle);
Invalidate;
end;

procedure TAlphaMemo.Invalidate;
begin
if FTransparent then SendMessage(Handle,TWM_RGSInvalidate,0,0)
  else inherited;
end;

procedure Register;
begin
  RegisterComponents('MyComponents', [TAlphaMemo]);
end;

end.
Solo copia y pega el codigo en una nueva unidad ,lo guardas y luego lo instalas.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 03-12-2009 a las 15:53:51.
Responder Con Cita
  #5  
Antiguo 03-12-2009
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
broly7

¿para que se usa esa habilidad de que se ponga de ese color si no tiene el foco?
Responder Con Cita
  #6  
Antiguo 03-12-2009
broly7 broly7 is offline
Miembro
 
Registrado: jun 2008
Posts: 43
Poder: 0
broly7 Va por buen camino
Smile

Cita:
Empezado por JXJ Ver Mensaje
broly7

¿para que se usa esa habilidad de que se ponga de ese color si no tiene el foco?
No lo he entendido muy bien. Que para que quiero que se ponga transparente?
-Mi Memo estará en "Readonly" no quiero que se escriba por lo tanto no tendrá el foco, y quiero que sólo se vean las letras para "hacer del recuadro de la imagen de detrás como si fuese el recuadro de un memo".

Más o menos lo he conseguido, sabe alguien cómo se puede hacer de un memo para que lea el string de un INI tal que admita los interlieados??
Si lo probáis con Readstring, no coje el cambio de línea T_T.
Responder Con Cita
  #7  
Antiguo 07-12-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por broly7 Ver Mensaje
No lo he entendido muy bien. Que para que quiero que se ponga transparente?
-Mi Memo estará en "Readonly" no quiero que se escriba por lo tanto no tendrá el foco, y quiero que sólo se vean las letras para "hacer del recuadro de la imagen de detrás como si fuese el recuadro de un memo".
.
Si va ser solo de lectura(Readonly), entonces para que usar un memo? si tranquilamente lo podrias hacer en un simple Label con su propiedad WordWrap=True para que sea multilinea y su propiedad Transparent=True para que sea transparente.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #8  
Antiguo 08-12-2009
broly7 broly7 is offline
Miembro
 
Registrado: jun 2008
Posts: 43
Poder: 0
broly7 Va por buen camino
Porque no tiene scroll bars
Responder Con Cita
  #9  
Antiguo 21-12-2011
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Me parece la mar de interesante este componente, rgstuamigo.

¿Sabrías indicarme si es posible que tu componente también sea transparente cuando tiene el foco?


Es que estoy haciéndome un programita en el que me vendría de lujo tener TMemo con líneas de diferentes colores de fondo (esto no se puede hacer ni con TMemo ni con TRichEdit).
Así que se me está ocurriendo usar tu componente transparente con un TImage detrás en el que yo pinto las líneas que quiero que se vean a través del TMemo, de manera que parezca que es el TMemo quien tiene las líneas de distinto color, ¿me explico?

Lo malo es que los TMemo que necesito sí que van a ser editables, y por lo tanto van a tener el foco.

Un saludo.
Muchas gracias.

Última edición por Flecha fecha: 21-12-2011 a las 10:43:23.
Responder Con Cita
  #10  
Antiguo 21-12-2011
Flecha Flecha is offline
Miembro
 
Registrado: nov 2006
Posts: 59
Poder: 18
Flecha Va por buen camino
Ya me respondo yo solito.

Dentro del procedure DoEnter he comentado la siguiente línea:

//Ftransparent:=False;

Y con eso ya es transparente siempre.


Peeeeeeeeeeeeeero al hacer scroll (ya sea con las barras de desplazamiento, o simplemente escribiendo texto, o desplándome por el TMemo con los cursores de teclado), la imágen de abajo se desplaza junto con el texto, en vez de que el texto "flote" por encima de la imágen.

Intentaré hacer algo a ver si logro que la imágen de debajo no siga al texto.
Si alguien avergua cómo, le agredecería que lo compartiera.

Muchas gracias.
Responder Con Cita
Respuesta



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
Problemas Sumando Memo1.Memo + Memo2.Memo JuanErasmo Impresión 10 05-02-2008 14:40:13
thread transparente piccolo2101 API de Windows 3 13-01-2006 10:45:42
Campo memo tabla escribirlo en componente Memo Sayuri Conexión con bases de datos 2 18-08-2005 13:58:01
Memo con el fondo transparente bustio OOP 0 01-11-2004 08:09:08
Un panel transparente yusnerqui Varios 2 23-03-2004 16:33:32


La franja horaria es GMT +2. Ahora son las 07:20:47.


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