2011-01-31 14 views
5

Domyślnie formularz z BorderStyle = bsSizeable ma menu systemowe (po lewej) i przycisk zamykania ("X", po prawej). Chcę pozbyć się menu systemu i trzymać przycisk zamykania.Formularz Delphi bez menu systemowego, ale z przyciskiem zamknięcia

Właściwość BorderIcons pozwala mi usunąć menu systemowe (poprzez menu biSystem), ale teraz przycisk zamknięcia również zniknął.

Czy istnieje sposób, aby to zrobić?

Korzystanie Delphi XE

PS: powinno być możliwe o ile dotyczy Windows: IE8 okno „Ustawienia Filtrowanie InPrivate” jest znaczna, posiada przycisk zamykania i nie ma menu systemowego.

+6

dziwne, dla mnie wartość domyślną dla 'BorderStyle = bsDialog' ma ** ** nie ma menu systemowego, niezależnie od tego, co jest określone w 'BorderIcons'. Powinno być tam 'biSystemMenu', aby pokazać czerwony X. –

+0

Masz rację, bsDialog działa tak, jak chcę. Rumieniec ;-) Zaktualizowałem pytanie: Chcę, żeby to działało również dla bsSizeable. – Giel

+0

Windows Media Center –

Odpowiedz

0

Nie sądzę, że istnieje sposób, aby to zrobić bez uciekania się do niestandardowego rysowania obszaru, który nie jest klientem, co jest bardzo trudne w przypadku szkła.

Rozważ tę metodę.

procedure TMyForm.DeleteSystemMenu; 
var 
    SystemMenu: HMenu; 
begin 
    SystemMenu := GetSystemMenu(Handle, False); 
    DeleteMenu(SystemMenu, SC_CLOSE, MF_BYCOMMAND); 
end; 

Tak, udało się pozbyć zamkniętej pozycji z menu systemowego, ale powoduje również wyłączenie przycisku zamykania. Wydaje się więc, że nie można mieć jednego bez drugiego.

+2

To wydaje się być przeciwieństwem * tego, co jest wymagane. Oczywiście zachowuje menu systemowe (od kiedy je modyfikujesz), ale wyłącza przycisk. –

+0

To samo dla 'DeleteMenu (SystemMenu, SC_SIZE, MF_BYCOMMAND);' Usuwa element menu Rozmiar i w konsekwencji nie można zmienić rozmiaru formularza. –

+0

@Rob Przeczytaj ponownie moją odpowiedź. Chodzi mi o to, że jeśli pozbędziesz się części menu systemowego, dopasowana funkcja na pasku napisów również zostanie wyłączona. W rzeczywistości komentujesz to, że Q wydaje się robić podobny punkt. –

0

BorderStyle := bsSizeToolWin robi to, co chcesz, z nieco innym wyglądem przycisku X.

+0

-1. Jest to zbyt odmienne, a ta niepożądana różnica nie jest konieczna. –

0

Przez "menu systemowe" masz na myśli ikonę po lewej stronie paska tytułu? Lub menu podręczne wywoływane za pomocą prawego przycisku myszy?

Jeśli jest ikona, że ​​chcesz usunąć - użyj tego kodu:

const 
    WM_ResetIcon = WM_APP - 1; 

type 
    TForm1 = class(TForm) 
    procedure FormShow(Sender: TObject); 
    protected 
    procedure WMResetIcon(var Message: TMessage); message WM_ResetIcon; 
    end; 

implementation 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    PostMessage(Handle, WM_ResetIcon, 0, 0); 
end; 

procedure TForm1.WMResetIcon(var Message: TMessage); 
const 
    ICON_SMALL = 0; 
    ICON_BIG = 1; 
begin 
    DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_BIG, 0)); 
    DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_SMALL, 0)); 
end; 
Powiązane problemy