2012-01-05 3 views
8

के उपयोग के बाद मूल रूप से डेल्फी TForm को रीसेट करने के लिए कैसे करें मैं उपयोगकर्ता द्वारा अपने नियंत्रण अनुपात के आकार के साथ एक फॉर्म को आकार देने की अनुमति देना चाहता हूं। स्केलबी (एन, एम) मेरे लिए ठीक काम करता है लेकिन अगर बार-बार दोहराया जाता है तो संचयी गोल करने वाली त्रुटियां होती हैं। इसका मुकाबला करने के लिए मैं बस स्केलबी() से पहले अपनी डिफ़ॉल्ट उपस्थिति और आकार में फॉर्म को फिर से बनाने के लिए कॉल के साथ आगे बढ़ना चाहता हूं और फिर स्केलबी को विभिन्न मानों के साथ कॉल करना चाहता हूं। मुझे पता है कि मैं अपने फॉर्म को एक पैनल के भीतर होस्ट करके (और इसे डिस्पोजेक्ट/रीरेटिंग) कर सकता हूं, लेकिन क्या कोई कॉल है जो स्केलबी() के उपयोग के बाद फॉर्म रीसेट करेगा?स्केलबी()

संपादित करें - मैं डेल्फी XE2 उपयोग कर रहा हूँ और यह भी एक घटक या अन्य कोड (भुगतान या मुफ्त) के साथ किसी की सफलता में रुचि होगी बड़े करीने से एक रूप पैमाने पर करने के - मेरे अपने डाउनलोड एक काम कर समाधान का उत्पादन नहीं किया है।

+1

क्या आप चाहते हैं कि उपयोगकर्ता फ्लाई पर फ़ॉर्म को स्केल करने में सक्षम हो, बार-बार? व्यक्तिगत रूप से मैं बस फिर से बनाना होगा। –

+0

@ डेविड: मैं बस उन्हें एक स्लाइडर खींचने में सक्षम होना चाहता हूं (कहें) जब तक कि यह सही न लगे, तब इसे छोड़ दें, इसलिए कोई प्रदर्शन प्रभाव नहीं है। –

उत्तर

7

EasySize (TFormResizer) घटक का प्रयास करें।
TFormResizer घटक फ़ॉर्म आकार में परिवर्तन के दौरान किसी भी रूप (या पैनल) पर सभी नियंत्रणों का आकार बदलता है।
मैंने इसे सफलतापूर्वक साल पहले उपयोग किया - डी 5/7 के साथ काम करता है। आपको XE2 के लिए छोटे समायोजन करने की आवश्यकता हो सकती है (मेरे पास XE2 नहीं है, इसलिए मैं इसका परीक्षण नहीं कर सकता)।

उपयोग:

uses 
    ..., Easysize; 

type 
    TForm1 = class(TForm) 
    ...   
    procedure FormCreate(Sender: TObject); 
    procedure FormResize(Sender: TObject); 
    private 
    FR: TFormResizer; 
    end; 

... 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    FR := TFormResizer.Create(Self); 
    FR.ResizeFonts := True; 
    FR.InitializeForm; 
end; 

procedure TForm1.FormResize(Sender: TObject); 
begin 
    FR.ResizeAll; 
end; 

end. 
+0

अच्छा - मैं एक नज़र डालेगा। धन्यवाद। –

+1

Easysize एक इलाज करता है और जब तक एक देशी समाधान प्रकट नहीं होता है, तब तक मैं आपका जवाब स्वीकार करूंगा। धन्यवाद। –

2

एक समाधान फॉर्म के सभी घटक नियंत्रणों पर फ़ॉर्म के घटक गुणों का उपयोग करना होगा और उन्हें अपने मूल मूल्य पर वापस रीसेट करना होगा।

निम्न आलेख उदाहरण कोड है: http://delphi.about.com/od/adptips2005/qt/storecontrolpos.htm

यह एक अलग उद्देश्य के लिए है, लेकिन यह कठिन करने के लिए अपनी आवश्यकताओं के कोड को संशोधित करने के लिए नहीं किया जाना चाहिए।

+0

क्या इसे वास्तव में शुरुआत में उनकी प्रतिलिपि संग्रहित करने की आवश्यकता है? उन्हें फिर से निकालने का कोई तरीका क्यों नहीं है लेकिन डिफ़ॉल्ट आकार पर? –

1

सबसे पहले, मूल पैमाने पर करने के पैमाने को समायोजित फिर नए पैमाने पर करने के लिए पैमाने। उदाहरण के लिए, ऑनरिजइज़ ईवेंट में एक फॉर्म स्केल करने के लिए:

... 
    private 
    FDesignHeight: Integer; 
    FDesignWidth: Integer; 
    FPrevWidth: Integer; 
    end; 

... 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    FDesignHeight := Height; 
    FDesignWidth := Width; 
    FPrevWidth := Width; 
    Scaled := True; 
end; 

procedure TForm1.FormResize(Sender: TObject); 
begin 
    if Scaled then 
    begin 
    DisableAlign; 
    ScaleBy(FDesignWidth, FPrevWidth); 
    ScaleBy(Width, FDesignWidth); 
    EnableAlign; 
    end; 
    FPrevWidth := Width; 
end; 

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, 
    NewHeight: Integer; var Resize: Boolean); 
begin 
    NewHeight := Round(NewWidth * FDesignHeight/FDesignWidth); 
end; 
+0

यह एक साफ समाधान है। धन्यवाद। –

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

  • कोई संबंधित समस्या नहीं^_^