![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убрать Title у формы, но при этом оставить бордюр формы [D6]
maxim2 © (2002-09-18 12:26:00)Привет всем!
Как убрать Title у формы, но при этом оставить бордюр формы?
Может кто знает.
alena.svt (2002-09-18 22:13:00) [1]Ну что можно на это сказать
Зато многому научились и теперь можете попровлять то что борланд не сделал. А перекрывать методы да еще и с участием WinApi тоже приятно ведь можно гордо заявить что я действительно могу!
Ну а если б дядьки в борланде сделали все то зачем бы мы нужны были.
Kibitzer (2002-09-18 20:22:00) [2]Мне когда-то тоже понадобилась форма без заголовка но с рамкой. Вот вырезка из моего старого проекта:
TForm2 = class(TForm)
protected
procedureCreateParams( varParams: TCreateParams); override;
end;
...
procedureTForm2.CreateParams( varParams: TCreateParams);
begin
inherited;
Params.Style := Params.Style orWS_DLGFRAME {or WS_SIZEBOX};
end;
А у формы ставимBorderStyleвbsNone
Если же раскомментировать стильWS_SIZEBOX, то размеры формы можно будет изменять мышкой.
По идее всё это должно настраиваться в инспекторе объектов, но таких свойств нету и это по моему неправильно. У борланда много кривых и недоделаных компонентов :(
Взять например свойствоFormStyleу той же формы. Выходит что я могу сделать либоMDIForm, либоStayOnTop? Но это не так! Однажды мне понадобилась фома которая и MDI и Stay on top. Опять пришлось обратиться кCreateParams:
//FormStyle установим в fsMDIForm
procedureTForm1.CreateParams( varParams: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle orWS_EX_TOPMOST;
end;
:(
Или понадобилось уTCheckBoxиTRadioButtonсвойствоWordWrap. Ведь они способны иметь это свойство. Достаточно (в том жеCreateParams, например) сделать:Params.Style := Params.Style or$2000. Это Борландам трудно было сделать? Пришлось писать наследника... :(
Про DBGrid я лучше вообще промолчу... :-/
alena.svt (2002-09-18 16:06:00) [3]Song © (18.09.02 15:41)
Увидала, завтра попробую но адрес был тот же.
maxim2 © (18.09.02 12:26)
Сделай себе компоненту на будущее и не майся больше.
unit MyRemoveCaption;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TMyRemoveCaption = class(TComponent)
private
FSizeCaption : Integer;
NActive : boolean;
FEnabled : boolean;
procedure SetActive(Value: Boolean);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
procedure Add(HandleForm: TForm);
procedure Remove(HandleForm: TForm);
property Enabled: boolean read FEnabled write SetActive default false;
{ Published declarations }
end;
procedure Register;
implementation
Var
ParentForm: TForm;
{ TMyRemoveCaption }
procedure TMyRemoveCaption.Add(HandleForm: TForm);
begin
NActive:=False;
If Self.ComponentState = [csDestroying] Then exit;
SetWindowLong(HandleForm.Handle, GWL_STYLE, GetWindowLong(HandleForm.Handle, GWL_Style) + WS_Caption);
HandleForm.Height:=HandleForm.Height + FSizeCaption;
end;
constructor TMyRemoveCaption.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ParentForm := TForm(AOwner);
end;
destructor TMyRemoveCaption.Destroy;
begin
if NActive then Add(ParentForm);
inherited Destroy;
end;
procedure TMyRemoveCaption.Remove(HandleForm: TForm);
begin
NActive:=True;
FSizeCaption := GetSystemMetrics(SM_CYCAPTION);
SetWindowLong(HandleForm.Handle, GWL_STYLE, GetWindowLong(HandleForm.Handle, GWL_Style) and not WS_Caption);
HandleForm.Height:=HandleForm.Height - FSizeCaption;
end;
procedure TMyRemoveCaption.SetActive(Value: Boolean);
begin
if Value then begin
Remove(ParentForm);
FEnabled:=True;
end;
if not Value then begin
Add(ParentForm);
FEnabled:=False;
end;
end;
procedure Register;
begin
RegisterComponents("Samples", [TMyRemoveCaption]);
end;
end.
Song (2002-09-18 15:41:00) [4]2alena.svt © (18.09.02 15:07)
См. мой последний ответ:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1032276741&n=0
Song (2002-09-18 15:38:00) [5]Вообще можно убрать Caption формы, а по границам наложить TPanel или TBevel
alena.svt (2002-09-18 15:07:00) [6]Ладно избегу вчерашнего разговора о том как надо отвечать на вопросы.
В событии OnCreate у формы определите следующее.
procedure TForm1.FormCreate(Sender: TObject);
var
FSizeCaption: Integer;
begin
FSizeCaption := GetSystemMetrics(SM_CYCAPTION);
SetWindowLong(Form1.Handle, GWL_STYLE, GetWindowLong(Form1.Handle, GWL_Style) and not WS_Caption);
Form1.Height:=Form1.Height - FSizeCaption;
end;
При данном коде форма не должна иметь стиль(чтоб рамка была)
bsSingle или bsToolWindow остальные пожалуйста.
alena.svt (2002-09-18 14:55:00) [7]SetWindowLong
Yr2 (2002-09-18 13:03:00) [8]Если я правильно понимаю твои термины "Title" и "бордюр", то просто сотри у формы свойство Caption.
neg2001 (2002-09-18 13:02:00) [9]Можно сделать так:
BorderStyle:=bsNone;
А на форму положить панель с Align:=alClient;
Вид такой же как и у формы с бордюром.