घर
Top.Mail.Ru Yandeks.Metrika
मंच: "शुरुआती";
वर्तमान संग्रह: 2018.09.16;
डाउनलोड करें: [xml.tar.bz2];

नीचे

घटक मूल्यों को प्रारंभिक करना इसी तरह की शाखाएँ खोजें


Денис11998833   (2016-08-06 15:20) [0]

एक घटक बनाया, TImage से एक वारिस। यथासंभव विवरण को सरल बनाने के लिए, मैं चाहता हूं कि TPicture घटक को बनाते समय संसाधन से चित्र को लोड करने के लिए, रनटाइम में। एक वारिस किया जाता है, संसाधन के नाम वाली संपत्ति को जोड़ा जाता है, एक विधि जोड़ी जाती है जो संसाधन को TPicture में लोड करती है। मैंने फॉर्म पर घटक डाला, मैं नई विधि को मैन्युअल रूप से खींचता हूं, चित्र लोड हो रहा है, सब कुछ ठीक है।

सवाल यह है कि मैं चाहता हूं कि चित्र स्वचालित रूप से लोड हो, बिना नई विधि को मैन्युअल रूप से खींचने के लिए। कंस्ट्रक्टर के अंत में संसाधन को लोड करने के लिए एक कॉल जोड़ा गया, इसका कुछ भी नहीं आया। कृपया मुझे बताएं कि इसे कैसे लागू किया जाए?



Kilkennycat ©   (2016-08-07 01:22) [1]


> कंस्ट्रक्टर के अंत में एक संसाधन लोडिंग कॉल जोड़ा गया, कुछ भी नहीं
> विफल रहा

और क्या आपने कोई गलती नहीं की? और रिपेयर \ ताज़ा \ अक्षम - इसमें से एक चे-थ्रेड (मुझे याद नहीं है कि डेल्फी में क्या होता है) फिर इसे कहा जाता है?



Германн ©   (2016-08-07 01:59) [2]


>
> डेनिसएक्सएनयूएमएक्स (एक्सएनयूएमएक्स एक्सएनयूएमएक्स: एक्सएनयूएमएक्स)
>
> मैंने एक घटक बनाया, TImage से एक वारिस।

ठीक है, कम से कम आप कम से कम कुछ कोड लाए।



ВладОшин ©   (2016-08-07 10:01) [3]

सब कुछ काम करना है, शायद मैं संसाधन के साथ आश्चर्यचकित हूं, यह वहां नहीं दिख रहा है



iop ©   (2016-08-07 10:44) [4]

कंस्ट्रक्टर के अंत में एक संसाधन लोड कॉल जोड़ा गया

कंस्ट्रक्टर में लोड की गई आपकी तस्वीर विरासत में मिली भार में मारी गई है।
अगर आपने इसे कंस्ट्रक्टर में सही तरीके से लोड किया है।

किसी कारण से



iop ©   (2016-08-07 10:48) [5]

इसके अतिरिक्त, आपके पास संभवतः एक प्रकाशित संपत्ति है जिसमें चित्र संसाधन का नाम है।

इसलिए कंस्ट्रक्टर में आपने इसके मूल्य को नहीं पहचाना है। यह अभी भी वहां खाली है।



Денис11998833   (2016-08-08 11:17) [6]

> और क्या कोई गलती नहीं हुई? और रिपेयर \ ताज़ा \ अक्षम - इसमें से एक चे-थ्रेड (मुझे याद नहीं है कि डेल्फी में क्या होता है) फिर इसे कहा जाता है?

कोई गलती नहीं। डिबगर ने देखा कि घटक निर्माणकर्ता के नाम पर संसाधन नाम के गुण खाली हैं।

> सब कुछ काम करना चाहिए, शायद मैं एक संसाधन के साथ प्रबंधित कर रहा हूं, यह वहां नहीं दिख रहा है

मैं मैन्युअल रूप से OnCreate रूपों में ApplyCaption पद्धति को खींचता हूं, सभी नियम, चित्र लोड किए जाते हैं, सब कुछ ठीक है।

> इसलिए कंस्ट्रक्टर में आप इसके मूल्य को नहीं पहचानते हैं। यह अभी भी वहां खाली है।

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

> ठीक है, आप कम से कम कुछ कोड लाए हैं।

मैं पोस्ट को ब्लॉक नहीं करना चाहता था, मुझे लगा कि यह वास्तव में सरल और कहीं आस-पास है)। यहाँ पूर्ण घटक कोड है:



Денис11998833   (2016-08-08 11:18) [7]

> और क्या कोई गलती नहीं हुई? और रिपेयर \ ताज़ा \ अक्षम - इसमें से एक चे-थ्रेड (मुझे याद नहीं है कि डेल्फी में क्या होता है) फिर इसे कहा जाता है?

कोई गलती नहीं। डिबगर ने देखा कि घटक निर्माणकर्ता के नाम पर संसाधन नाम के गुण खाली हैं।

> सब कुछ काम करना चाहिए, शायद मैं एक संसाधन के साथ प्रबंधित कर रहा हूं, यह वहां नहीं दिख रहा है

मैं मैन्युअल रूप से OnCreate रूपों में ApplyCaption पद्धति को खींचता हूं, सभी नियम, चित्र लोड किए जाते हैं, सब कुछ ठीक है।

> इसलिए कंस्ट्रक्टर में आप इसके मूल्य को नहीं पहचानते हैं। यह अभी भी वहां खाली है।

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

> ठीक है, आप कम से कम कुछ कोड लाए हैं।

मैं पोस्ट को ब्लॉक नहीं करना चाहता था, मुझे लगा कि यह वास्तव में सरल और कहीं आस-पास है)। यहाँ पूर्ण घटक कोड है:


unit uPngGraphicButton;

interface

uses ExtCtrls, Graphics, Classes, UITypes, Dialogs, PNGImage, GIFImg, JPEG,
Messages, Controls, SysUtils, Forms;

type
 TCaptionOffsets = class(TPersistent)
 private
   FOffsetNormalX: integer;
   FOffsetNormalY: integer;
   FOffsetDownX: integer;
   FOffsetDownY: integer;
 published
   property OffsetNormalX: integer read FOffsetNormalX write FOffsetNormalX default 0;
   property OffsetNormalY: integer read FOffsetNormalY write FOffsetNormalY default -1;
   property OffsetDownX: integer read FOffsetDownX write FOffsetDownX default 0;
   property OffsetDownY: integer read FOffsetDownY write FOffsetDownY default 0;
 end;

 TPNGGraphicButton = class(TImage)
 private
   FCaptionFont: TFont;
   //FCaptionOffsetX, FCaptionOffsetY: integer;
   FCaptionOffsets: TCaptionOffsets;
   FLoadFromResource: boolean;
   FResourceName: string;
   FResourceHandle: THandle;
   FCaption: string;
   FPictureNormal,
   FPictureHover,
   FPictureDown,
   FPictureNotActive: TPicture;
   procedure SetNormalPicture(Value: TPicture);
   procedure SetHoverPicture(Value: TPicture);
   procedure SetDownPicture(Value: TPicture);
   procedure SetNotActivePicture(Value: TPicture);
   procedure SetFont(const Value: TFont);
   procedure SetCaptionOffsets(const Value: TCaptionOffsets);
   procedure WriteText(WPicture: TPicture; DownImg: boolean);
   procedure LoadPngResource(ResName:string; Picture: TPicture);
 protected
   //procedure Paint; override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;
   procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;
   //procedure MouseEnter; override;
   procedure CMMouseEnter(var msg: TMessage);
       message CM_MOUSEENTER;
   procedure CMMouseLeave(var msg: TMessage);
       message CM_MOUSELEAVE;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure ApplyCaption;
   procedure LoadAllResources;
 published
   property Caption: string read FCaption write FCaption;
   property CaptionOffsets: TCaptionOffsets read FCaptionOffsets write SetCaptionOffsets;
   property Font: TFont read FCaptionFont write SetFont;
   property PictureNormal: TPicture read FPictureNormal write SetNormalPicture;
   property PictureHover: TPicture read FPictureHover write SetHoverPicture;
   property PictureDown: TPicture read FPictureDown write SetDownPicture;
   property PictureNotActive: TPicture read FPictureNotActive write SetNotActivePicture;
   property LoadFromResource: boolean read FLoadFromResource write FLoadFromResource default True;
   property ResourceName: string read FResourceName write FResourceName;
   property ResourceHandle: THandle read FResourceHandle write FResourceHandle;
 end;

procedure Register;

implementation

uses Windows, UxTheme;

procedure Register;
begin
 RegisterComponents("oTweak", [TPNGGraphicButton]);
end;

constructor TPNGGraphicButton.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FCaptionFont:=TFont.Create;
 FPictureNormal := TPicture.Create;
 FPictureHover := TPicture.Create;
 FPictureDown := TPicture.Create;
 FPictureNotActive := TPicture.Create;
 FCaptionOffsets:=TCaptionOffsets.Create;
 FLoadFromResource:=True;

 FCaptionFont.Name:="Segoe UI";
 FCaptionFont.Height:=-18;
 FCaptionFont.Color:=clWhite;

 FCaptionOffsets.OffsetNormalX:=0;
 FCaptionOffsets.OffsetNormalY:=-1;
 FCaptionOffsets.OffsetDownX:=0;
 FCaptionOffsets.OffsetDownY:=0;

 ApplyCaption;
end;

destructor TPNGGraphicButton.Destroy;
begin
 FCaptionFont.Free;
 FPictureNormal.Free;
 FPictureHover.Free;
 FPictureDown.Free;
 FPictureNotActive.Free;
 FCaptionOffsets.Free;
 inherited Destroy;
end;

procedure TPNGGraphicButton.ApplyCaption;
begin
 LoadAllResources;
 WriteText(PictureNormal, False);
 WriteText(PictureHover, False);
 WriteText(PictureDown, True);
 WriteText(PictureNotActive, False);
 Picture.Assign(PictureNormal);
end;

procedure TPNGGraphicButton.LoadAllResources;
begin
 if (FResourceName<>"") and (FLoadFromResource) then
 begin
   LoadPngResource(FResourceName+"_normal", FPictureNormal);
   LoadPngResource(FResourceName+"_hover", FPictureHover);
   LoadPngResource(FResourceName+"_down", FPictureDown);
   LoadPngResource(FResourceName+"_na", FPictureNotActive);
 end;
end;



Денис11998833   (2016-08-08 11:18) [8]


procedure TPNGGraphicButton.LoadPngResource(ResName:string; Picture: TPicture);
var
 MyPNG : TPNGImage;
 hLibRes: THandle;
begin
 if FResourceHandle<>0 then
   hLibRes:=FResourceHandle
 else
   hLibRes:=hInstance;

 if FindResource(hLibRes, PChar(ResName), RT_RCDATA)=0 then
 begin
   Exit;
 end;

 MyPNG := TPNGImage.Create;
 try
   MyPNG.LoadFromResourceName(hLibRes, ResName);
   Picture.Assign(MyPNG);
 finally
   MyPNG.Free;
 end;
end;

procedure TPNGGraphicButton.WriteText(WPicture: TPicture; DownImg: boolean);
var
 X, Y,
 OffsX,
 OffsY: integer;
begin
 if not Assigned(WPicture) then
   Exit;

 if FCaption="" then
   Exit;

 if (WPicture.Graphic is TPNGImage) and (not WPicture.Graphic.Empty)  then
   with ((WPicture.Graphic as TPNGImage)) do
   begin
     Canvas.Font.Assign(FCaptionFont);
     X:=Trunc(WPicture.Width/2-Canvas.TextWidth(FCaption)/2);
     Y:=Trunc(WPicture.Height/2-Canvas.TextHeight("A")/2);

     if DownImg then
     begin
       OffsX:=FCaptionOffsets.OffsetDownX;
       OffsY:=FCaptionOffsets.OffsetDownY;
     end else
     begin
       OffsX:=FCaptionOffsets.OffsetNormalX;
       OffsY:=FCaptionOffsets.OffsetNormalY;
     end;
     X:=X+OffsX;
     Y:=Y+OffsY;
     if X<0 then X:=0;
     if Y<0 then Y:=0;

     SetBkMode(Canvas.Handle, 1);
     Canvas.TextOut(X, Y, FCaption);
   end;
end;

procedure TPNGGraphicButton.SetNormalPicture(Value: TPicture);
begin
 if Assigned(Value) then
   FPictureNormal.Assign(Value);
end;

procedure TPNGGraphicButton.SetHoverPicture(Value: TPicture);
begin
 if Assigned(Value) then
   FPictureHover.Assign(Value);
end;

procedure TPNGGraphicButton.SetDownPicture(Value: TPicture);
begin
 if Assigned(Value) then
   FPictureDown.Assign(Value);
end;

procedure TPNGGraphicButton.SetNotActivePicture(Value: TPicture);
begin
 if Assigned(Value) then
   FPictureNotActive.Assign(Value);
end;

procedure TPNGGraphicButton.SetFont(const Value: TFont);
begin
 if Assigned(Value) then
   FCaptionFont.Assign(Value);
end;

procedure TPNGGraphicButton.SetCaptionOffsets(const Value: TCaptionOffsets);
begin
 if Assigned(Value) then
   FCaptionOffsets.Assign(Value);
end;

procedure TPNGGraphicButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
 { Your code }
 Picture.Assign(PictureDown);
 inherited MouseDown(Button, Shift, X, Y);
end;

procedure TPNGGraphicButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
 { Your code }
 Picture.Assign(PictureNormal);
 inherited MouseUp(Button, Shift, X, Y);
end;

procedure TPNGGraphicButton.CMMouseEnter(var msg: TMessage);
begin
 Picture.Assign(PictureHover);
 inherited;
end;

procedure TPNGGraphicButton.CMMouseLeave(var msg: TMessage);
begin
 Picture.Assign(PictureNormal);
 inherited;
end;

end.



iop ©   (2016-08-08 11:38) [9]

स्पष्ट करें कि यह खाली क्यों है?

कंस्ट्रक्टर में एनओएन-खाली क्यों होना चाहिए?
chtol की आज्ञा से?



Денис11998833   (2016-08-08 11:46) [10]

> कंस्ट्रक्टर में यह गैर-खाली क्यों होना चाहिए?

मुझे बताएं कि इसके बारे में कहां पढ़ना है .. मुझे यह स्पष्ट रूप से नहीं पता चला कि कहीं भी घटक का निर्माण किस क्षण में किया गया है, इसके मान कैसे आरंभ किए गए हैं, इस सटीक क्षण में आप यह सुनिश्चित कर सकते हैं कि घटक पूरी तरह से बनाया गया है, जो मान मैं टाइमआउट में सेट किया गया है। या तो मैं बुरी तरह से देख रहा था, या वास्तव में यह जानकारी बहुत कम है ..

मेरे विशेष मामले में एक घटक बनाते समय तस्वीर को लोड करने के मुद्दे को कैसे हल किया जाए?



iop ©   (2016-08-08 11:52) [11]

बनाते समय, आपको कुछ भी लोड करने की आवश्यकता नहीं है।

उदाहरण के लिए, जब एप्लिकेशन चल रहा हो, आप कंस्ट्रक्टर को कॉल करते हैं।

प्रपत्र पर डिज़ाइन में कोई घटक नहीं था।
किसी ने उसके लिए संसाधन का नाम निर्धारित नहीं किया।
और उसी समय आप किस चित्र को वहां लोड करने जा रहे थे?



Денис11998833   (2016-08-08 13:09) [12]

> फॉर्म पर डिजाइन में कोई कंपोनेंट नहीं था।

मैं समझता हूं कि पिछली पोस्ट से एक बार फिर:

> मैं समझता हूं कि जब आप सिर्फ एक घटक को किसी प्रपत्र पर फेंकते हैं, तो उस समय, सभी गुण डिफ़ॉल्ट रूप से सेट होते हैं। और रनटाइम में क्या होता है जब कोई प्रोग्राम मेरा कंपोनेंट पूरी तरह से स्पष्ट नहीं होता है।

यानी डिजाइन समय में, मैं मानों के गुण सेट करता हूं, प्रोग्राम शुरू करता हूं, प्रोग्राम को डिबगर के साथ उस स्थान पर रोक देता हूं जहां घटक निर्माता को बुलाया जाता है, और गुण खाली हैं।

मैं कंस्ट्रक्टर को रनटाइम में कॉल करने के बारे में विशेष रूप से बात कर रहा हूं, डिजाइन समय के साथ सब कुछ स्पष्ट है।



iop ©   (2016-08-08 13:16) [13]

प्रकाशक कंस्ट्रक्टर में, गुण दो बार खाली होते हैं।
1। क्योंकि घटक ने अभी तक dfm नहीं पढ़ा है
2। क्योंकि घटक रनटाइम में बनाया जा सकता है (डिजाइन में फॉर्म पर झूठ नहीं है)

यदि यह डिज़ाइन में फ़ॉर्म पर था और यदि डिज़ाइन को संसाधन का नाम बताया गया था, तो यह नाम पहले से ज्ञात और उपलब्ध होगा
प्रक्रिया भरी हुई: आभासी;



Денис11998833   (2016-08-08 13:36) [14]

> यदि यह डिजाइन में फार्म पर था और यदि डिजाइन को संसाधन का नाम बताया गया था, तो नाम पहले से ज्ञात और उपलब्ध होगा
> प्रक्रिया भरी हुई: आभासी;

ऐसा लगता है कि यह लगभग आपकी जरूरत है! क्या लोडेड के मूल्य को बदलने के लिए कोई विशेष घटना नहीं है? किसी तरह का ओनलीडेड



iop ©   (2016-08-08 13:41) [15]

लोडर के मूल्य में कोई परिवर्तन नहीं होता है।
उसका कोई मतलब नहीं है।
यह एक प्रक्रिया है।



Денис11998833   (2016-08-08 14:34) [16]

संक्षेप में, मैं भ्रमित हो गया (.. यदि सभी एक ही समस्या पर वापस जाते हैं, तो मुझे अपने LoadAllResources को कहां लोड करना चाहिए ताकि चित्रों को रनटाइम पर अपलोड किया जाए?



iop ©   (2016-08-08 15:04) [17]

इसे लोड में छड़ी;



Денис11998833   (2016-08-08 16:35) [18]

शुक्रिया दयालु आदमी)!

द्वारा जोड़ा गया:

संरक्षित प्रक्रिया भरी हुई; ओवरराइड; प्रक्रिया TPNGGraphicButton.Loaded; शुरू करना विरासत में मिला; ApplyCaption; अंत;

और सब कुछ उसी के अनुसार गाया गया)



पन्ने: 1 पूरी शाखा

मंच: "शुरुआती";
वर्तमान संग्रह: 2018.09.16;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.65 एमबी
समय: 0.021 c
15-1474880632
किसको शक होगा
2016-09-26 12:03
2018.09.16
व्हाट्सएप के साथ एक संदेश कैसे स्वीकार करें?


2-1470486053
Denis11998833
2016-08-06 15:20
2018.09.16
घटक मूल्यों को प्रारंभिक करना


11-1267379542
tippa
2010-02-28 20:52
2018.09.16
पाठ के मेमो केवल 29998 बाइट्स में


2-1470299345
novichoks
2016-08-04 11:29
2018.09.16
StretchBlt


2-1469453166
Raisa
2016-07-25 16:26
2018.09.16
पीओएस प्रिंटर





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский