Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 293
  • Last Modified:

TStringList and an Add String Event

I#m using a stringlist for collecting all error and others information in my software project.
The stringlist is defined in my Mainform and share as a property with many other forms.
I use another form to display this stinglist.
So far this works fine.

Now I want an software improvment, once a new string is added in some unit to the stringlist,
the add function on this stringlist is overloaded and calls the display stringlist function in my display unit,
can i Overload just the add function for this stringlist and assign a pointer/ reference to any other
function to be excuted at this add event ?
0
BdLm
Asked:
BdLm
  • 3
  • 3
1 Solution
 
2266180Commented:
just do something like this:
type
  TStringAddedEvent=procedure(Sender:TStringList; s:string) of object;
 
  tmys=class(tstringlist)
  private
    FOnStringAdded: TStringAddedEvent;
  public
    function Add(const S: string): Integer; override;
    property OnStringAdded:TStringAddedEvent read FOnStringAdded write FOnStringAdded;
  end;
 
 
{ tmys }
 
function tmys.Add(const S: string): Integer;
begin
  result:=inherited Add(s);
  if assigned(OnStringAdded) then
    OnStringAdded(self, s);
end;

Open in new window

0
 
BdLmAuthor Commented:
you code matches with my ideas, there is only a small limitation within my project.

with all the units I exchanged a Stringlist data type, using this ideas I have to exchange the tmys data type. I#m not allowed to exchange the definition of the units now.
0
 
2266180Commented:
you don't have to. it's basic OOP. tmys is a descendent of tstringlist so you can pass an s:tmys to a procedure that requires a tstringlist or a tstrings. it's the other way around that can cause problems, when the procedure requires a tmys but you only have a tstringlist. in that case you must check if you can trypecast before doing so:
procedure whatever(s:ststringlist);
....
  if s is tmys then
    dosomethingelse(s as tmys)
  else
    trouble
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
BdLmAuthor Commented:
can I get a short help how to assign a function name ?
MyStrList.OnStringAdded  := Button3Click(Sender);
ist not the correct syntax.
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit_TStringList2, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
 
    MyStrList  :  TStringList2;  //  rename tmys  to this name
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var  i  :  Integer;
begin
      //  test function to add 100 test Strings
      for i:= 1 to 100 do
           MyStrList.Add('test String =  ' + IntToStr(i)  );
 
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
      //  What function to execute on the onadd event ...?
      MyStrList.OnStringAdded  := Button3Click(Sender);
end;
 
 
 
 
procedure TForm1.Button3Click(Sender: TObject);
var  i  :  Integer;
begin
 
      Memo1.Lines.Clear;
      // Move a strlist to the memo
      for i:= 1 to MyStrList.Count-1 do
                    Memo1.Lines.Add(IntToStr(i) +  ' : ' + MyStrList[i]);
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
      // just create the new Stringlist
      MyStrList  :=TStringList2.Create;
end;
 
end.

Open in new window

0
 
2266180Commented:
it's not the correct sintax and it's not the correct function either.
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit_TStringList2, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure stringadded(sender:tstringlist; s:string);
  public
    { Public-Deklarationen }
 
    MyStrList  :  TStringList2;  //  rename tmys  to this name
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.stringadded(sender:tstringlist; s:string);
begin
  showmessage('the string "'+s+'" was added');
  button3.click;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var  i  :  Integer;
begin
      //  test function to add 100 test Strings
      for i:= 1 to 100 do
           MyStrList.Add('test String =  ' + IntToStr(i)  );
 
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
      //  What function to execute on the onadd event ...?
      MyStrList.OnStringAdded  := Button3Click(Sender);
end;
 
 
 
 
procedure TForm1.Button3Click(Sender: TObject);
var  i  :  Integer;
begin
 
      Memo1.Lines.Clear;
      // Move a strlist to the memo
      for i:= 1 to MyStrList.Count-1 do
                    Memo1.Lines.Add(IntToStr(i) +  ' : ' + MyStrList[i]);
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
      // just create the new Stringlist
      MyStrList  :=TStringList2.Create;
  MyStrList.OnStringAdded:=StringAdded;
end;
 
end.

Open in new window

0
 
BdLmAuthor Commented:
fine, my problem is solved  .-)   tkx,
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now