Vra

Ek het 'n MDI toepassing geskryf in Delphi 2006 wat XP loop met die standaard tema het.

Is daar 'n manier om die beheer van die voorkoms van die MDI Kinders aan die groot XP-styl titelbalk op elke venster te vermy?

Ek het probeer om die opstel van die BorderStyle van die MDIChildren om bsSizeToolWin maar hulle is nog steeds gelewer as normale Vorms.

Was dit nuttig?

Oplossing

Al jou behoefte - oorlading prosedure CreateWindowHandle, soos volg:

unit CHILDWIN;
interface
uses Windows, Classes, Graphics, Forms, Controls, StdCtrls;

type
  TMDIChild = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure CreateWindowHandle(const Params: TCreateParams); override;
  end;

implementation

{$R *.dfm}
procedure TMDIChild.CreateWindowHandle(const Params: TCreateParams);
begin
  inherited CreateWindowHandle(Params);
  SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
end.

Ander wenke

Die manier MDI werk nie gel met wat jy probeer om te doen.

As jy die "MDI" formaat nodig, moet jy oorweeg om óf die ingeboude of 'n kommersiële docking pakket, en gebruik die docking opstel om die MDI gevoel na te boots.

In my Delphi programme, Ek gebruik dikwels TFrames en ouer hulle na die hoof vorm, en 'n maksimum van hulle, sodat hulle opneem die kliënt gebied. Dit gee jou iets soortgelyk aan hoe Outlook lyk. Dit gaan 'n bietjie iets soos hierdie:

TMyForm = class(TForm)
private
  FCurrentModule : TFrame;
public
  property CurrentModule : TFrame read FModule write SetCurrentModule;
end;

procedure TMyForm.SetCurrentModule(ACurrentModule : TFrame);
begin
  if assigned(FCurrentModule) then
    FreeAndNil(FCurrentModule);  // You could cache this if you wanted
  FCurrentModule := ACurrentModule;
  if assigned(FCurrentModule) then
  begin
    FCurrentModule.Parent := Self;
    FCurrentModule.Align := alClient;
  end;
end;

Om dit te gebruik, kan jy eenvoudig dit te doen:

MyForm.CurrentModule := TSomeFrame.Create(nil);

Daar is 'n goeie argument dat jy koppelvlakke (die skep van 'n IModule koppelvlak of iets) wat jy gebruik moet gebruik. Ek doen dikwels dat, maar dit is meer kompleks as wat nodig is om die konsep te verduidelik.

HTH

Ek dink nie daar is; in my ervaring, is MDI in Delphi baie streng beperk en beheer word deur die implementering daarvan in die VCL (en miskien ook deur die Windows API?). Byvoorbeeld, moenie probeer wegkruip 'n MDI kind (jy sal 'n uitsondering te kry as jy probeer, en jy sal hê om te spring deur 'n paar van API hoepels te werk om daardie), of die verandering van die manier waarop die hoof menu 'n MDI kind se is saamgesmelt met die gasheer vorm nie.

Gegewe hierdie beperkinge, miskien jy moet heroorweeg waarom jy wil spesiale titel bars in die eerste plek te hê? Ek dink daar is ook 'n goeie redes waarom hierdie MDI dinge is gestandaardiseer --- jou gebruikers kan dit waardeer:)

(PS: lekker om 'n Delphi vraag sien hier rond)

Dankie onnodb

Ongelukkig is die kliënt dring aan op MDI en die kleiner titelbalk.

Ek het uitgewerk een manier om dit te doen wat by die titel bar te verberg deur oorheersende die vensters CreateParams en dan skep my eie titelbalk (eenvoudige paneel met 'n paar muis hantering vir die verskuiwing). Werk goed genoeg so ek dink ek kan dit uit te voer deur die kliënt en kyk of dit sal doen ...

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top