19. december 2001 - 16:30
#2
Gøre formen gennemsigtig
Hvis du vil lave din form fuldstændig gennemsigtig skal du sætte følgende linie ind i din FormCreate:
Form1.Brush.Style := bsClear;
\"Form1\" varierer efter navnet på formen.
Du kan dobbeltklikke på formen for at komme ind i FormCreate. :-)
Du kan prøve i Object Inspectoren at sætte formens BorderStyle til bsNone. Så vil man slet ikke kunne se formen. Så kan den kun lukkes på Alt+F4 og Ctrl+Alt+Del!
20. december 2001 - 15:49
#6
unit Unit2;
interface
uses
Windows , Classes ,Messages,ExtCtrls, Sysutils, Controls;
const
TMWM__SpecialInvalidate=WM_USER+1111;
Type
TTransparentPanel = class(TPanel)
private
procedure SpecialInvalidate(var Message:TMessage); message TMWM__SpecialInvalidate;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CNCTLCOLOREDIT(var Message:TWMCTLCOLOREDIT); message CN_CTLCOLOREDIT;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
public
constructor Create(AOwner: TComponent); override;
end;
implementation
{ TTransparentPanel }
procedure TTransparentPanel.CNCTLCOLOREDIT(var Message: TWMCTLCOLOREDIT);
begin
with Message do
begin
SetBkMode(ChildDC,TRANSPARENT);
Result:=GetStockObject(HOLLOW_BRUSH)
end
end;
constructor TTransparentPanel.Create(AOwner: TComponent);
begin
inherited;
ControlStyle:=[csCaptureMouse, csDesignInteractive, csClickEvents, csSetCaption, csOpaque, csDoubleClicks, csReplicatable, csNoStdEvents];
end;
procedure TTransparentPanel.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
ExStyle:= ExStyle
or WS_EX_TRANSPARENT
and not WS_EX_WINDOWEDGE
and not WS_EX_STATICEDGE
and not WS_EX_DLGMODALFRAME
and not WS_EX_CLIENTEDGE;
end;
procedure TTransparentPanel.SpecialInvalidate(var Message: TMessage);
var
Rect : TRect;
begin
if Parent <> nil then
begin
Rect:=ClientRect;
Rect.TopLeft:=Parent.ScreenToClient(ClientToScreen(Rect.TopLeft));
Rect.BottomRight:=Parent.ScreenToClient(ClientToScreen(Rect.BottomRight));
InvalidateRect(Parent.Handle,@Rect,true);
RedrawWindow(Handle,nil,0,RDW_FRAME+RDW_INVALIDATE)
end;
end;
procedure TTransparentPanel.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result:=1
end;
procedure TTransparentPanel.WMPaint(var Message: TWMPaint);
begin
SendMessage(Handle,TMWM__SpecialInvalidate,0,0);
end;
end.
Jens B
22. december 2001 - 18:54
#7
Det er lige meget, jeg har ikke brug for det alligevel.
Men det var ellers et godt svar fra borrisholt, som da også fortjener de point.