2010-03-31 15 views
35

आपको लगता है कि मानक फ़ॉन्ट्स (9 6 डीपीआई) और "बड़ी फोंट" सेटिंग (120 डीपीआई) दोनों के साथ एक विंडोज संवाद संगत बनाने के लिए सर्वोत्तम प्रथाएं हैं ताकि ऑब्जेक्ट ओवरलैप न हो जाएं या कट ऑफ हो जाएं?"बड़े फोंट" के साथ संवाद संगत बनाएं।

बीटीडब्लू: बस अगर यह प्रासंगिक है, तो मुझे डेल्फी संवाद के लिए ऐसा करने में दिलचस्पी है।

अग्रिम धन्यवाद!

+2

11 अपवॉट्स और अभी तक कोई जवाब नहीं! काफी अच्छा सवाल लगता है। –

+0

सवाल थोड़ा अस्पष्ट है। किसी विशिष्ट समस्या का उत्तर देना आसान होगा। तो जवाब भी दायरे में व्यापक हैं। – merula

+0

समस्या भी दायरे में व्यापक है। मैं ऐसे समाधान को पसंद करता हूं जो विशिष्ट परिस्थितियों के लिए कई छोटे समाधानों की बजाय सभी परिस्थितियों में काम करता है जो एक साथ अच्छी तरह से खेल नहीं सकते हैं। –

उत्तर

7

"Considerations When Dynamically Resizing Forms and Controls" के तहत, D2007 सहायता फ़ाइल में एक बहुत अच्छा लेख है (ध्यान दें कि यूआरएल मदद फ़ाइल के लिए है, न कि वेब पेज भी)।

उसी नाम के तहत एक ही विषय, D2010 help file (ऊपर जैसा यूआरएल के बारे में समान चेतावनी), या docwiki पर पाया जा सकता है।

यह TForm.Scaled और TForm.ScaleBy की जांच करने के लिए भी सार्थक (कम से कम थोड़ा सा) है।

8

सामान्य रूप से इस उद्देश्य के लिए लेआउट प्रबंधकों का उपयोग करना चाहिए। यही वह है जिसे वे डिजाइन कर रहे हैं।

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

+4

मुझे लगता है कि संक्षिप्त जवाब यह है कि "यह एक बड़ी डेल्फी कमजोर जगह है"। एक्सएएमएल यह बेहतर करता है। जावा/स्विंग यह बेहतर करता है। स्पष्ट रूप से, डेल्फी से बेहतर यह सब कुछ बेहतर है। यहां तक ​​कि ग्लेड जैसे खुले स्रोत सामान भी लेआउट मैनेजर आधारित हैं जो इस सामान को बेहतर बनाता है। –

+0

आधुनिक डेल्फी संस्करणों में कम से कम फ़ायरमॉन्की में लेआउट प्रबंधन घटक होते हैं: [फायरमॉन्की लेआउट रणनीतियां] (http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Layouts_Strategies)। वीसीएल के लिए तीसरे पक्ष के लेआउट घटक उपलब्ध हैं, हालांकि। –

0
  • कभी भी नियंत्रण और इसके वर्णन लेबल को एक तरफ न रखें, हमेशा लेबल को इसके ऊपर रखें।

लेकिन इसके अलावा? शायद:

  • लेबल के दाएं और नीचे पर्याप्त जगह छोड़ दें ताकि बड़े फोंट का उपयोग होने पर वे अन्य नियंत्रणों के साथ ओवरलैप न हों।

मैंने कभी भी उस परिदृश्य में TLabeledEdit का उपयोग करने का प्रयास नहीं किया है, हो सकता है कि वे स्वचालित रूप से ऐसा करें?

0

कथित व्यावसायिक समाधान (डेवलपर एक्सप्रेस वीसीएल लेआउट प्रबंधक) हैं। लेकिन मुझे उनमें से किसी पर भरोसा नहीं है। मुझे संदेह है कि वर्तमान यूआई घटक सेट (वीसीएल) में एम्बरकाडेरो को इसे गंभीर कमजोरी के रूप में संबोधित करना चाहिए।

मुझे लगता है कि तीसरे पक्ष के घटक सेट अभी आपका सबसे तेज़ समाधान हो सकता है। यह वाणिज्यिक है लेकिन भारी महंगा नहीं है।

http://www.devexpress.com/products/VCL/ExLayoutControl/

+0

क्या आधुनिक डेल्फी संस्करणों में पहले से ही इस विषय के लिए कोई समर्थन है? (एक्सई और बेहतर) – EProgrammerNotFound

+0

उच्च डीपीआई डिस्प्ले के लिए नहीं, जो अंतर्निहित मुद्दा है, "बड़े फ़ॉन्ट आकार" का अर्थ है 96 से अधिक डीपीआई डिस्प्ले, साथ ही साथ "डीपीआई हैक" माइक्रोसॉफ्ट (फॉक्स डीपीआई फोंट बढ़ाने के लिए) द्वारा उपयोग किया जाता है। –

2

यह कैसे मैं खिड़की के फ़ॉन्ट आकार सेटिंग की परवाह किए बिना डेल्फी VCL के पिक्सल के साथ सौदा करने की कोशिश है।

unit App.Screen; 

interface 

uses Controls; 

type 
    TAppScreen = class(TObject) 
    private 
    FDefaultPixelsPerInch: integer; 
    FPixelsPerInch: integer; 
    function GetPixelsPerInch: integer; 
    procedure SetPixelsPerInch(const Value: integer); 
    public 
    procedure AfterConstruction; override; 
    function DefaultPixelsPerInch: integer; 
    function InAcceptableRange(const aPPI: integer): boolean; 
    procedure ScaleControl(const aControl: TWinControl); 
    property PixelsPerInch: integer read GetPixelsPerInch write SetPixelsPerInch; 
    end; 

    TAppScreenHelper = class helper for TAppScreen 
    private 
    class var FInstance: TAppScreen; 
    class function GetInstance: TAppScreen; static; 
    public 
    class procedure Setup; 
    class procedure TearDown; 
    class property Instance: TAppScreen read GetInstance; 
    end; 

implementation 

uses 
    TypInfo, Windows, SysUtils, Forms, Graphics; 

type 
    TScreenEx = class(TScreen) 
    published 
    property PixelsPerInch; 
    end; 

    TScreenHelper = class helper for TScreen 
    public 
    procedure SetPixelsPerInch(Value: integer); 
    end; 

procedure TScreenHelper.SetPixelsPerInch(Value: integer); 
begin 
    PInteger(Integer(Self) + (Integer(GetPropInfo(TScreenEx, 'PixelsPerInch').GetProc) and $00FFFFFF))^ := Value; 
end; 

procedure TAppScreen.AfterConstruction; 
begin 
    inherited; 
    FDefaultPixelsPerInch := Screen.PixelsPerInch; 
    FPixelsPerInch := FDefaultPixelsPerInch; 
end; 

function TAppScreen.DefaultPixelsPerInch: integer; 
begin 
    Result := FDefaultPixelsPerInch; 
end; 

function TAppScreen.GetPixelsPerInch: integer; 
begin 
    Result := FPixelsPerInch; 
end; 

function TAppScreen.InAcceptableRange(const aPPI: integer): boolean; 
begin 
    if DefaultPixelsPerInch > aPPI then 
    Result := DefaultPixelsPerInch * 0.55 < aPPI 
    else if DefaultPixelsPerInch < aPPI then 
    Result := DefaultPixelsPerInch * 1.55 > aPPI 
    else 
    Result := True; 
end; 

procedure TAppScreen.ScaleControl(const aControl: TWinControl); 
begin 
    aControl.ScaleBy(PixelsPerInch, DefaultPixelsPerInch); 
end; 

procedure TAppScreen.SetPixelsPerInch(const Value: integer); 
begin 
    FPixelsPerInch := Value; 
    Screen.SetPixelsPerInch(FPixelsPerInch); 
end; 

class function TAppScreenHelper.GetInstance: TAppScreen; 
begin 
    if FInstance = nil then 
    FInstance := TAppScreen.Create; 
    Result := FInstance; 
end; 

class procedure TAppScreenHelper.Setup; 
begin 
    TAppScreen.Instance; 
end; 

class procedure TAppScreenHelper.TearDown; 
begin 
    FInstance.Free; 
    FInstance := nil; 
end; 

initialization 
    TAppScreen.Setup; 
finalization 
    TAppScreen.TearDown; 
end. 

अलग पिक्सल मूल्य के प्रभाव का परीक्षण करने के निम्नलिखित का प्रयास करें:

TAppScreen.Instance.PixelsPerInch := 120; 
TAppScreen.Instance.PixelsPerInch := 96; 
TAppScreen.Instance.PixelsPerInch := 150; 

आप से पहले PixelsPerInch बदलना चाहिए डेल्फी के VCL संवाद सहित TForm के वारिस का दृष्टांत।

+0

आप अपनी 'TAppScreen' कक्षा के लिए' क्लास हेल्पर 'का उपयोग क्यों कर रहे हैं? सभी 'वर्ग' सदस्यों को 'TAppScreen' कक्षा में ही होना चाहिए। 'TAppScreen' के लिए 'वर्ग सहायक' का उपयोग करने की कोई आवश्यकता नहीं है। 'TScreen.FPixelsPerInch' सदस्य तक पहुंच प्राप्त करने के लिए,' System.Rtti' इकाई के माध्यम से उन्नत आरटीटीआई का उपयोग करने पर विचार करें, जो 'TypInfo' इकाई से लीगेसी आरटीटीआई जैसे प्रकाशित गुणों को न केवल निजी और सार्वजनिक क्षेत्रों तक पहुंच सकता है। –

संबंधित मुद्दे