Creating custom controls. Do I have to give them a name?
Let's say I create (from TPanel) and install my own control. It contains only one button:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn:= TButton.Create(Self);
btn.Parent:= Self;
btn.Name:= 'xxx'; <-------- mandatory?
end;
Is it mandatory to give a name to that panel?
This question started from a comment posted by dummzeuch here:
This happens when your label doesn't have a name. The IDE adds
declarations to the class only if the control has got a name (how else
should it declare it?).
What does a EClassNotFound raised at runtime really mean when the class in question is there at compile and link time, and there explicitly in code?
(I am specifically refer to that comment only)
delphi
|
show 1 more comment
Let's say I create (from TPanel) and install my own control. It contains only one button:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn:= TButton.Create(Self);
btn.Parent:= Self;
btn.Name:= 'xxx'; <-------- mandatory?
end;
Is it mandatory to give a name to that panel?
This question started from a comment posted by dummzeuch here:
This happens when your label doesn't have a name. The IDE adds
declarations to the class only if the control has got a name (how else
should it declare it?).
What does a EClassNotFound raised at runtime really mean when the class in question is there at compile and link time, and there explicitly in code?
(I am specifically refer to that comment only)
delphi
1
You are mixing apples and oranges. Linked question was about streaming from dfm, and here you are creating control in code. No, you don't need a name, but you might want to set it as sub component.
– Dalija Prasnikar
Nov 13 '18 at 10:30
1
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
– Dsm
Nov 13 '18 at 10:56
@DalijaPrasnikar - Nope. I was not speaking about that question. I was speaking about one VERY specific comment (that was also not answering that question).
– Rigel
Nov 13 '18 at 11:11
@Dsm - thanks. I was not naming my sub-controls. And as you said, it was working ok. But that comment got me worrying: "what if I was doing it wrong all the time" ? If you post this as answer, I will accept it.
– Rigel
Nov 13 '18 at 11:12
1
Comment posted as answer, as requested
– Dsm
Nov 13 '18 at 13:51
|
show 1 more comment
Let's say I create (from TPanel) and install my own control. It contains only one button:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn:= TButton.Create(Self);
btn.Parent:= Self;
btn.Name:= 'xxx'; <-------- mandatory?
end;
Is it mandatory to give a name to that panel?
This question started from a comment posted by dummzeuch here:
This happens when your label doesn't have a name. The IDE adds
declarations to the class only if the control has got a name (how else
should it declare it?).
What does a EClassNotFound raised at runtime really mean when the class in question is there at compile and link time, and there explicitly in code?
(I am specifically refer to that comment only)
delphi
Let's say I create (from TPanel) and install my own control. It contains only one button:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn:= TButton.Create(Self);
btn.Parent:= Self;
btn.Name:= 'xxx'; <-------- mandatory?
end;
Is it mandatory to give a name to that panel?
This question started from a comment posted by dummzeuch here:
This happens when your label doesn't have a name. The IDE adds
declarations to the class only if the control has got a name (how else
should it declare it?).
What does a EClassNotFound raised at runtime really mean when the class in question is there at compile and link time, and there explicitly in code?
(I am specifically refer to that comment only)
delphi
delphi
edited Nov 13 '18 at 14:06
Rigel
asked Nov 13 '18 at 10:13
RigelRigel
9,96514111223
9,96514111223
1
You are mixing apples and oranges. Linked question was about streaming from dfm, and here you are creating control in code. No, you don't need a name, but you might want to set it as sub component.
– Dalija Prasnikar
Nov 13 '18 at 10:30
1
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
– Dsm
Nov 13 '18 at 10:56
@DalijaPrasnikar - Nope. I was not speaking about that question. I was speaking about one VERY specific comment (that was also not answering that question).
– Rigel
Nov 13 '18 at 11:11
@Dsm - thanks. I was not naming my sub-controls. And as you said, it was working ok. But that comment got me worrying: "what if I was doing it wrong all the time" ? If you post this as answer, I will accept it.
– Rigel
Nov 13 '18 at 11:12
1
Comment posted as answer, as requested
– Dsm
Nov 13 '18 at 13:51
|
show 1 more comment
1
You are mixing apples and oranges. Linked question was about streaming from dfm, and here you are creating control in code. No, you don't need a name, but you might want to set it as sub component.
– Dalija Prasnikar
Nov 13 '18 at 10:30
1
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
– Dsm
Nov 13 '18 at 10:56
@DalijaPrasnikar - Nope. I was not speaking about that question. I was speaking about one VERY specific comment (that was also not answering that question).
– Rigel
Nov 13 '18 at 11:11
@Dsm - thanks. I was not naming my sub-controls. And as you said, it was working ok. But that comment got me worrying: "what if I was doing it wrong all the time" ? If you post this as answer, I will accept it.
– Rigel
Nov 13 '18 at 11:12
1
Comment posted as answer, as requested
– Dsm
Nov 13 '18 at 13:51
1
1
You are mixing apples and oranges. Linked question was about streaming from dfm, and here you are creating control in code. No, you don't need a name, but you might want to set it as sub component.
– Dalija Prasnikar
Nov 13 '18 at 10:30
You are mixing apples and oranges. Linked question was about streaming from dfm, and here you are creating control in code. No, you don't need a name, but you might want to set it as sub component.
– Dalija Prasnikar
Nov 13 '18 at 10:30
1
1
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
– Dsm
Nov 13 '18 at 10:56
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
– Dsm
Nov 13 '18 at 10:56
@DalijaPrasnikar - Nope. I was not speaking about that question. I was speaking about one VERY specific comment (that was also not answering that question).
– Rigel
Nov 13 '18 at 11:11
@DalijaPrasnikar - Nope. I was not speaking about that question. I was speaking about one VERY specific comment (that was also not answering that question).
– Rigel
Nov 13 '18 at 11:11
@Dsm - thanks. I was not naming my sub-controls. And as you said, it was working ok. But that comment got me worrying: "what if I was doing it wrong all the time" ? If you post this as answer, I will accept it.
– Rigel
Nov 13 '18 at 11:12
@Dsm - thanks. I was not naming my sub-controls. And as you said, it was working ok. But that comment got me worrying: "what if I was doing it wrong all the time" ? If you post this as answer, I will accept it.
– Rigel
Nov 13 '18 at 11:12
1
1
Comment posted as answer, as requested
– Dsm
Nov 13 '18 at 13:51
Comment posted as answer, as requested
– Dsm
Nov 13 '18 at 13:51
|
show 1 more comment
2 Answers
2
active
oldest
votes
No, you do not need to name sub components.
However, if you intent on exposing access to a sub componenet as a property that gets streamed in a DFM, you do need to mark the sub component, at least:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn := TButton.Create(Self);
btn.Parent := Self;
btn.SetSubComponent(True); // <-- ADD THIS
end;
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
add a comment |
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53278644%2fcreating-custom-controls-do-i-have-to-give-them-a-name%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
No, you do not need to name sub components.
However, if you intent on exposing access to a sub componenet as a property that gets streamed in a DFM, you do need to mark the sub component, at least:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn := TButton.Create(Self);
btn.Parent := Self;
btn.SetSubComponent(True); // <-- ADD THIS
end;
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
add a comment |
No, you do not need to name sub components.
However, if you intent on exposing access to a sub componenet as a property that gets streamed in a DFM, you do need to mark the sub component, at least:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn := TButton.Create(Self);
btn.Parent := Self;
btn.SetSubComponent(True); // <-- ADD THIS
end;
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
add a comment |
No, you do not need to name sub components.
However, if you intent on exposing access to a sub componenet as a property that gets streamed in a DFM, you do need to mark the sub component, at least:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn := TButton.Create(Self);
btn.Parent := Self;
btn.SetSubComponent(True); // <-- ADD THIS
end;
No, you do not need to name sub components.
However, if you intent on exposing access to a sub componenet as a property that gets streamed in a DFM, you do need to mark the sub component, at least:
constructor TMyPanel.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
btn := TButton.Create(Self);
btn.Parent := Self;
btn.SetSubComponent(True); // <-- ADD THIS
end;
answered Nov 13 '18 at 17:09
Remy LebeauRemy Lebeau
333k18251446
333k18251446
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
add a comment |
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
"SetSubComponent" - oh... yeah!
– Rigel
Nov 15 '18 at 9:27
add a comment |
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
add a comment |
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
add a comment |
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
answered Nov 13 '18 at 13:47
DsmDsm
5,1281320
5,1281320
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53278644%2fcreating-custom-controls-do-i-have-to-give-them-a-name%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
You are mixing apples and oranges. Linked question was about streaming from dfm, and here you are creating control in code. No, you don't need a name, but you might want to set it as sub component.
– Dalija Prasnikar
Nov 13 '18 at 10:30
1
The IDE needs components to have a name, but otherwise no. So if the IDE does not directly access any of the properties of the subcomponent then it does not need a name. This does not stop the properties of the component being set by the parent, for example via a property of the parent that is visible to the IDE.
– Dsm
Nov 13 '18 at 10:56
@DalijaPrasnikar - Nope. I was not speaking about that question. I was speaking about one VERY specific comment (that was also not answering that question).
– Rigel
Nov 13 '18 at 11:11
@Dsm - thanks. I was not naming my sub-controls. And as you said, it was working ok. But that comment got me worrying: "what if I was doing it wrong all the time" ? If you post this as answer, I will accept it.
– Rigel
Nov 13 '18 at 11:12
1
Comment posted as answer, as requested
– Dsm
Nov 13 '18 at 13:51