डेल्फी एमडीआई आवेदन और एमडीआई बच्चों की टाइटलबार

मुझे डेल्फी 2006 में लिखा गया एक एमडीआई एप्लीकेशन मिला है जो डिफ़ॉल्ट थीम के साथ एक्सपी चलाता है।

क्या प्रत्येक खिड़की पर बड़े एक्सपी-स्टाइल टाइटल बार से बचने के लिए एमडीआई बच्चों की उपस्थिति को नियंत्रित करने का कोई तरीका है?

मैंने MDIChildren bsSizeToolWin के BorderStyle को सेट करने का प्रयास किया है, लेकिन उन्हें अभी भी सामान्य रूपों के रूप में प्रस्तुत किया गया है।

0
ro fr bn

4 उत्तर

जिस तरह से एमडीआई काम करता है वह उस चीज से जेल नहीं करता है जिसे आप करने की कोशिश कर रहे हैं।

यदि आपको "एमडीआई" प्रारूप की आवश्यकता है, तो आपको अंतर्निहित या का उपयोग करने पर विचार करना चाहिए वाणिज्यिक डॉकिंग पैकेज, और एमडीआई महसूस की नकल करने के लिए डॉकिंग सेटअप का उपयोग करें।

मेरे डेल्फी ऐप्स में, मैं अक्सर टीएफआरम्स का उपयोग करता हूं और उन्हें मुख्य रूप में अभिभावक करता हूं, और उन्हें अधिकतम करता हूं ताकि वे ग्राहक क्षेत्र ले सकें। यह आपको कुछ दिखता है जैसे Outlook कैसे दिखता है। यह कुछ ऐसा ही जाता है:

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;

इसका उपयोग करने के लिए, आप बस यह कर सकते हैं:

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

एक अच्छी बहस है कि आपको इंटरफेस का उपयोग करना चाहिए (एक आईपॉड इंटरफ़ेस या कुछ बनाना) जिसका आप उपयोग करते हैं। मैं अक्सर ऐसा करता हूं, लेकिन यह अवधारणा को समझाने के लिए आवश्यक से अधिक जटिल है।

HTH

0
जोड़ा

धन्यवाद onnodb

दुर्भाग्य से ग्राहक एमडीआई और छोटे शीर्षक पट्टी पर जोर देता है।

मैंने ऐसा करने का एक तरीका काम किया है जो विंडोज़ CreateParams को ओवरराइड करके टाइटल बार को छिपाना है और फिर अपना खुद का शीर्षक पट्टी (चलने के लिए कुछ माउस हैंडलिंग के साथ सरल पैनल) बनाना है। अच्छी तरह से काम करता है इसलिए मुझे लगता है कि मैं इसे क्लाइंट द्वारा चला सकता हूं और देख सकता हूं कि यह क्या करेगा ...

0
जोड़ा

मुझे नहीं लगता कि वहां है; मेरे अनुभव में, डेल्फी में एमडीआई वीसीएल (और शायद विंडोज एपीआई द्वारा भी) में इसके कार्यान्वयन से बहुत सख्ती से नियंत्रित और नियंत्रित है। उदाहरण के लिए, एमडीआई बच्चे को छिपाने का प्रयास न करें (यदि आप कोशिश करते हैं तो आपको अपवाद मिलेगा, और आपको इसके आसपास काम करने के लिए कुछ एपीआई हुप्स के माध्यम से कूदना होगा), या एमडीआई बच्चे के मुख्य मेनू के तरीके को बदलना होस्ट फॉर्म के साथ विलय कर दिया गया है।

इन सीमाओं को देखते हुए, शायद आपको पुनर्विचार करना चाहिए कि आप पहली बार विशेष शीर्षक सलाखों क्यों लेना चाहते हैं? मुझे लगता है कि इस एमडीआई सामान को मानकीकृत करने के अच्छे कारण भी हैं --- आपके उपयोगकर्ता इसकी सराहना कर सकते हैं :)

(पीएस: यहां डेल्फी प्रश्न देखने के लिए अच्छा लगा!)

0
जोड़ा

आपकी सभी ज़रूरतें - अधिभार प्रक्रिया CreateWindowHandle, इस तरह:

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.
0
जोड़ा