PDA

Ver la Versión Completa : Form, Memo Y Mas...


ChristianS
31-05-2003, 02:37:22
Que tal?
Bueno, hay tres cosas que queria saber...
1) Como se puede hacer para que un Form sea transparente?
O sea, a lo que me refiero es que si se vea un boton o una imagen que hay encima, pero el fondo se vea transparente.

2) Si tengo un Memo con N lineas y quiero que al apretar un boton me vaya a la linea "i", como puedo hacer esto?
Intente con SelStart y con el scrollby y no me funciono.

3) Alguien sabe si hay algun libro de programacion en delphi 3 o mayor para bajar (preferentemente en español???)

Gracias.

SAlu2
ChristianS

marcoszorrilla
31-05-2003, 14:48:22
En cuanto a lo del formulario transparente prueba con este código de ejemplo:


procedure TForm1.Button1Click(Sender: TObject);
var
frmRegion, tempRegion: HRGN;
i: Integer;
Arect: TRect;
begin
frmRegion := 0;
for I := 0 to ControlCount - 1 do begin
{ create a region for the control }
aRect := Controls[i].BoundsRect;
{ coordinates have to be window-relative, not client area relative }
OffsetRect( aRect, clientorigin.x - left, clientorigin.y - top );
tempRegion := CreateRectRgnIndirect( aRect );
{ merge the region with the "summary" region we are building }
if frmRegion = 0 then
frmRegion := tempRegion
else
begin
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
end;
end;
{ create a region for the caption and menu bar and add it to the summary }
tempregion := CreateRectRgn( 0, 0, Width, GetSystemMetrics( SM_CYCAPTION )+
GetSystemMetrics( SM_CYSIZEFRAME ) +
GetSystemMetrics( SM_CYMENU ) * Ord(Menu <> Nil));
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
SetWindowRgn( handle, frmRegion, true );
end;



Libros descargables La Cara Oculta de Delphi 4

No tengo ahora la dirección a mano, sino lo encuentras me lo comunicas.

Un Saludo.

ChristianS
31-05-2003, 23:47:53
EL codigo que me pasaste funciona,pero nome oculta la barra con los iconos de cerrar y minimizar. Incluso Poniendo el Borderstyle = none;

Alguna sugerencia?

marcoszorrilla
01-06-2003, 10:41:19
Es muy fácil anula la parte que pinta el caption.


procedure TForm1.Button1Click(Sender: TObject);
var
frmRegion, tempRegion: HRGN;
i: Integer;
Arect: TRect;
begin
frmRegion := 0;
for I := 0 to ControlCount - 1 do begin
{ create a region for the control }
aRect := Controls[i].BoundsRect;
{ coordinates have to be window-relative, not client area relative }
OffsetRect( aRect, clientorigin.x - left, clientorigin.y - top );
tempRegion := CreateRectRgnIndirect( aRect );
{ merge the region with the "summary" region we are building }
if frmRegion = 0 then
frmRegion := tempRegion
else
begin
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
end;
end;

SetWindowRgn( handle, frmRegion, true );
end;
Un Saludo.

ChristianS
04-06-2003, 04:48:59
Que tal?
El procedimiento que me pasate funciona a la perfeccion.
Ahora... si en vez de quitar el form, simplemente lo quiero de color "transparente"...
En la ayuda de delphi 3 encontre lo siguiente...


procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;

Muestra este cabezal de procedimiento el cual ponen bajos los "private".
Con esto queda el Form "transparente" cuando se ejecuta el programa (aunque en este procedimiento no haya codigo escrito)
La cosa es que no se como hacer para volver a invocar esto para qe me vuelta a borrar el form.

Bueno, espero que me hayan entendido.

SAlu2
ChristianS