2012-03-07 11 views
5

जिस परियोजना पर मैं काम करता हूं वह कई 100 रूपों में शामिल होता है। उन्हें ज्यादातर मुख्य रूप से बुलाया जाता है। एप्लिकेशन का नाम सभी फॉर्मकेपशन में है।एक फॉर्म के बढ़ने को पकड़ने की कोशिश

अब आवेदन के एक अलग "संस्करण" में फॉर्म कैप्शन को दूसरे एप्लिकेशन नाम में बदलना होगा। लेकिन यह सशर्त है।

क्या मैं

Screen.OnActiveFormChange := ScreenOnActiveFormChange; 
formcreate में

बाध्यकारी था और उस के लिए एक प्रक्रिया बनाने के साथ आया था।

procedure TFormMAIN.ScreenOnActiveFormChange(Sender: TObject); 
begin 
    if Newversion then begin 
    if assigned(screen.activeform) then begin 
     Screen.ActiveForm.Caption := SwapFormCaption(Screen.ActiveForm.Caption); 
    end; 
    end; 
end; 

यह 95% मामलों में अच्छी तरह से काम करता है। लेकिन उन 5% में फॉर्म बहुत तेज दिखाया गया है। कैप्शन अपडेट होने से पहले खिड़की खींची जाती है और खिड़कियां वहां छोड़ देती हैं। लेकिन कैप्शन में पहले से ही एक नया मूल्य है। किस काम का उपचार बढ़ रहा था और फॉर्म की ऊंचाई को 1 पिक्सेल से कम कर रहा था और फिर यह सही दिखाएगा। form.repaint यहां मदद नहीं की थी। यह चीजों को करने का एक बदसूरत तरीका है।

जो मैं वास्तव में चाहता हूं वह सक्रियण के बजाय उप-फ़ॉर्म के निर्माण को रोकना है। मैंने इसके बारे में संसाधन खोजने की कोशिश की है लेकिन सफल नहीं हुआ।

+13

का सबसे अच्छा तरीका यह अपने सभी रूपों एक आम आधार से निकाले जाते हैं बनाने के लिए है करने के लिए पुनः बनाने के लिए मजबूर करने में जोड़ें कक्षा। फिर आप एक ही स्थान से सभी रूपों के लिए सामान्य सेटिंग्स को नियंत्रित कर सकते हैं –

+0

आगे की जांच के बाद मुझे लगता है कि यह किसी भी तरह से एक वीडियोबफर बग है। जब मैं खिड़की खींचता हूं, तो कैप्शन बदलता नहीं है और गलत रहता है। जब तक मैं इसे डेस्कटॉप से ​​पर्ची करने के लिए खींचता हूं। जब मैं इसे वापस खींचता हूं, तो जो हिस्सा डेकस्टॉप पर नहीं दिखाया गया था, वह सही कैप्शन में बदल जाता है जबकि दिखाई देने वाला हिस्सा गलत रहता है। –

उत्तर

0

क्या आपने विंडो एपीआई का उपयोग करने की कोशिश की है?

SetWindowText(Screen.ActiveForm.Handle,PChar(SwapFormCaption(Screen.ActiveForm.Caption)); 

संपादित करें: 1 और सुझाव: एक DrawMenuBar एपीआई कॉल विंडो मेनू पट्टी

DrawMenuBar(Screen.ActiveForm.Handle); 
+0

यह वही समस्या है जो मैंने पोस्ट किए गए कोड के समान ही किया है। –

+0

DrawMenuBar अच्छी तरह से काम करता है, धन्यवाद। –

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