Delphi - Formularios no cuadrados en delphi

 
Vista:

Formularios no cuadrados en delphi

Publicado por Mario (1 intervención) el 22/10/2003 03:39:23
Boys and Girls:
Necesito que me ayuden, si hay una forma de hacer formularios que no sean cuadrados; en lo posible redondos o con cualquier otra forma.
Desde ya muy agradecidos.
suarito
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Formularios geométricos I

Publicado por Fer (269 intervenciones) el 22/10/2003 09:11:40
Además de la infinidad de componentes que existen para ese objetivo, puedes utilizar la siguiente técnica:

Para probar el ejemplo siguiente, simplemente cortar y pegar sobre una Aplicación nueva:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDblClick(Sender: TObject);
private
public
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
Rgn: THandle;
begin
BorderStyle := bsNone;
if Width > Height then
Width := Height
else
Height := Width;
Rgn := CreateEllipticRgn(0, 0, Width, Height);
SetWindowRgn(Handle, Rgn, True);
DeleteObject(Rgn);
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
Close;
end;

end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios geométricos II

Publicado por Fer (269 intervenciones) el 22/10/2003 09:13:45
El código que sigue es la continuación de mi anterior mensaje (no me dejaba grabar el mensaje con tanto texto):

Nota.- El método del evento OnDblClick se ha puesto para poder cerrar el formulario.
Como se puede ver en el ejemplo, el formulario no tiene barra de caption, así que vamos a añadir la posibilidad de que el formulario se pueda mover sin necesidad de esta barra. Para ello hay que dibujar dentro del Form un objeto TShape, poner los colores y características que queramos y añadir estos dos métodos:
procedure WMNCHitTest(var Msg: TWMNCHitTest); message wm_NCHitTest;

Este método hay que ponerlo en la claúsula public del formulario. Captura el mensaje de Windows WM_NCHITTEST. Simplemente se encarga de comprobar que hemos pinchado el ratón sobre el objeto Shape y "engañar" a Windows para que piense que estamos pinchando la barra del título:

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
with Msg DO
with ScreenToClient(Point(XPos, YPos)) do
if PtInRect(Shape1.BoundsRect, Point(X, Y)) then
Result := htCaption;
end;

El otro método es el de respuesta al evento OnShow del formulario y se encarga únicamente de centrar nuestra figura (shape) dentro del formulario:
procedure TForm1.FormShow(Sender: TObject);
begin
Shape1.SetBounds((Width div 2) - (Shape1.Width div 2),
(Height div 2) - (Shape1.Height div 2),
Shape1.Width, Shape1.Height);
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar