में सक्रिय करें। मैंने आवेदन के व्यवहार का परीक्षण करने के लिए एक डी 7 आवेदन लिखा था .ऑनएक्टिवेट।आवेदन का अप्रत्याशित व्यवहार। डेल्फी 7
procedure TMainForm.FormCreate (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.FormCreate - Begin');
Application.OnActivate := AppActivate;
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.FormCreate - End');
end;
procedure TMainForm.AppActivate (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppActivate - Begin');
ShowWidthsHeights (Sender);
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppActivate - End');
end;
procedure TMainForm.ShowWidthsHeights (Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.ShowWidthsHeights - Begin');
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.ShowWidthsHeights - End');
end;
आवेदन शुरू करने के बाद, Memo1 की सामग्री है:
यह प्रासंगिक हिस्सा है
1 - MainForm.FormCreate - शुरू
2 - MainForm.FormCreate - अंत
3 - MainForm। AppActivate - शुरू
4 - MainForm.ShowWidthsHeights - शुरू
5 - MainForm.ShowWidthsHeights - अंत
6 - MainForm.AppActivate - अंत
यह सही है।
लेकिन अगर मैं तो टास्कबार में एक शॉर्टकट पर क्लिक करें, इन 4 लाइनों Memo1 जोड़े जाते हैं:
7 - MainForm.AppActivate - शुरू
8 - MainForm.ShowWidthsHeights - शुरू
9 - MainForm.ShowWidthsHeights - अंत
10 - MainForm.AppActivate - अंत
डी 7 ऐसा क्यों करता है?
मेरा आवेदन सक्रिय नहीं किया गया है, इसके विपरीत, इसे निष्क्रिय कर दिया गया है!
अगर Application.OnDeactivate घटना भी निकाल दिया जाता है, मैं इस ईवेंट हैंडलर जोड़ा परीक्षण करने के लिए:
procedure TMainForm.AppDeactivate(Sender: TObject);
begin
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppDeactivate - Begin');
Memo1.Lines.Add (IntToStr (Memo1.Lines.Count + 1) + ' - MainForm.AppDeactivate - End');
end;
और TMainForm.FormCreate को यह बयान कहा: शुरू करने के बाद
Application.OnDeactivate := AppDeactivate;
एप्लिकेशन, मेमो 1 में मूल मामले में समान 6 लाइनें थीं, लेकिन टास्कबार में शॉर्टकट पर क्लिक करने के परिणामस्वरूप मेमो 1:
में 8 अतिरिक्त लाइनें हुईं7 - MainForm.AppDeactivate - Begin
8 - MainForm.AppDeactivate - End
9 - MainForm.AppActivate - Begin
10 - MainForm.ShowWidthsHeights - Begin
11 - MainForm.ShowWidthsHeights - End
12 - MainForm.AppActivate - End
13 - MainForm.AppDeactivate - Begin
14 - MainForm.AppDeactivate - End
तो, मेरा आवेदन निष्क्रिय हो जाता है, फिर सक्रिय हो जाता है, और फिर फिर से निष्क्रिय हो जाता है!
यह काफी उलझन में है!
डेल्फी आपको केवल 'WM_ACTIVATEAPP' संदेश को प्रतिबिंबित कर रहा है जो Windows आपके ऐप पर भेजता है। विंडोज ऐसा क्यों करता है, मुझे नहीं पता। –
क्या आप सकारात्मक हैं कि 7 से 10 लॉग होता है जब आप * टास्कबार बटन पर पहली बार क्लिक करते हैं (जो प्रपत्र को कम से कम कम करेगा), या जब आप ज्ञापन देखने के लिए फिर से क्लिक करेंगे? आप सुनिश्चित करने के लिए ज्ञापन पर लॉगिंग करने के बजाय 'आउटपुटडिबगस्ट्रिंग' और 'इवेंट लॉग' (ctrl + alt + v) का उपयोग कर सकते हैं। –
@ सर्टैक हाँ, मैंने इसे पहले ही चेक किया है। यह ठीक है जैसा कि क्यू –