Solved

RunTime Labels

Posted on 2001-07-17
6
385 Views
Last Modified: 2010-04-06
I created an array of Labels at runtime.

LNames: TList;

procedure...
var L: TLabel; I: Integer;
begin
 for I := 0 to 9 do
 begin
 L := TLabel.Create(Form1);
 L.Parent := Scroll;  // Scroll is a scrollbox
 L.Top := 16;  
 L.Left := 60;
 L.Caption := 'Name';
 LNames.Add(L);
 end;
end;


2 Questions...
Note: If I try to LNames.Clear I get a Access Violation.
      I do destroy the list at Form1.Destroy

1)How do I get change the values of the labels?
-- LNames[0].Caption = 'Somthing else'; // wrong

2)How do I release any or all of the Label?
-- LNames[9].Free   // wrong

Don
0
Comment
Question by:d32coder
  • 3
  • 2
6 Comments
 
LVL 3

Accepted Solution

by:
nnbbb09 earned 200 total points
ID: 6291100

Where do you create LNames? Has it been created by the time you call clear. Just inspect LNames and see if it is still set to nil.

1. To set the caption of a label in the list you need to typecast the pointer to a TLabel. eg : TLabel(LNames[0]).Caption := 'Something else';

2. If you are using a TList then you need to type the pointer to a TLabel before calling free. eg : TLabel(LNames[0]).Free; Also remember to delete the pointer (LNames.Delete(0)) after freeing.

If you have D4 onwards then you could consider using a TComponentList as this has the ability to own its objects, so that when you use clear, delete, free etc.. it frees the appropriate objects. It makes life a lot easier that using a raw TList.

Jo
0
 
LVL 1

Expert Comment

by:h_mohsenian
ID: 6291124
dear d32coder,

this code has not error but i dont can help u or not?

procedure TForm1.Button1Click(Sender: TObject);
var L: TLabel; I: Integer;
begin
  try
    LNames := TList.Create;
    LNames.Clear;
    for I := 0 to 9 do
    begin
      L := TLabel.Create(Form1);
      L.Parent := ScrollBar1;  // Scroll is a scrollbox
      L.Top := 16;
      L.Left := 60;
      L.Caption := 'Name';
      LNames.Add(L);
    end; // for


    // for Caption u must use (LNames.Items[i]) but i dont know it exactly


    LNames.Clear;


    //   just do all of ur needs here
    //   ..
    //   ..
  finally
    LNames.Destroy;
  end;

end;

best regards
hamed
0
 
LVL 1

Expert Comment

by:h_mohsenian
ID: 6291133
nnbbb09 code helped me:
TLabel(LNames[0]).caption := 'hamed' is true or at least
better than (LNames.Items[i]).

hamed
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:d32coder
ID: 6291234
Lnames is declared as a Global and is created in Form.Create.

I'm trying your code now.

bbiab
0
 

Author Comment

by:d32coder
ID: 6291559
I liked the TComponentList thing.

If we can change the question to that topic I'd appreciate it.

I'm trying this...  CList is my TComponentList and is global.  Created in Form.Create and Freed in Form.Destroy


procedure...
var L: TLabel;
begin
L := TLabel.Create(Form1);

L.Caption := 'a';
CList.Add(L);
L.Caption := 'b';
CList.Add(L);
end;

I know this is wrong because the pointers in the CList point to the same component...



My goal create as many Labels as needed at runtime (unknown number at design time but it could be as many as 100).  

I need to be able to edit the properties of each label ..
TLabel(CList[a]).Caption := 'c';

...and to remove them all when needed.
for i := 0 to CList.Count -1 do Clist.Remove(CList.First);

Having said all of that...


Please show me how to declare L so that I can add multiple instances of it insterad of overwriting the previous instance with a second call to CList.Add...


Even Better..  CList.Add(TLabel.Create(form1)); ???
This is becoming more complicated so I'll up the points.

Thanks to all you for being so patient.

Don



0
 

Author Comment

by:d32coder
ID: 6292133
I figured out the ComponentList but would have never explored it without your comment.

Thanks
Don
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Need Delphi function to get Youtube video title 5 225
Using idhttp to login to instagram 2 76
Dev Express grid collapse 2 39
Firemonkey DbLookupComboBox equivalent ? 2 35
This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now