Silly question...

Hello,

I know i'm gonna get laughed at me... but can anyone tell me how to reference a RichEdit component from the main Form of an MDI App. where RichEdit is on the MDI Child form??? thanks alot!!!
Prototype_T-104Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Eddie ShipmanAll-around developerCommented:
Say your MDIChild is named Child2...

  Child2.RichEdit1

should do it...

0
sgc_romaniaCommented:
MainForm.ActiveMDIChild.richedit1
0
Eddie ShipmanAll-around developerCommented:
Suppose it is NOT the Active child???
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

kretzschmarCommented:
TFormClassWithRichedit(ActiveMDIChild).richedit1

or

TFormClassWithRichedit(MDIChildren[index]).richedit1

whereas
TFormClassWithRichedit is the Class declaration od your MDIChild

meikl ;-)
0
kretzschmarCommented:
typo
od -> of
0
Prototype_T-104Author Commented:
hmmm i am still getting error: "Undeclared identifier : RichEdit1".
I don't get it...
0
Eddie ShipmanAll-around developerCommented:
You must include the unit that contains the MDIChild in your implementation uses clause.
From the Main Menu, select File->Use Unit and select the unit that contains the MDIChild
that contains the RichEdit.
0
andrewjbCommented:
Eddie's will work.
sgc_romana's wont.
kretzschmar's will, too, so long as you use the right class name(!)

Sounds like you're using Eddie's method.
0
kretzschmarCommented:
a sample

--- main-unit

unit mdi_re_main_u;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses mdi_re_child_u;  //child-unit used

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(self) do show;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i, childs, lines : integer;
begin
  childs := MDIChildCount;
  lines := 0;
  for i := 0 to MDIChildCount -1 do
    if (MDIChildren[i] is TForm2) then
      lines := lines + TForm2(MDIChildren[i]).RichEdit1.Lines.Count;

  Showmessage('There are '+inttostr(childs)+' Childs'+#10+
              'Which are Containing in Sum '+inttostr(lines)+' Lines Text');

end;

end.

---- Child-Unit
unit mdi_re_child_u;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm2 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := caFree;
end;

end.

---------

meikl ;-)
0
Prototype_T-104Author Commented:
Thanks but here is what i need. When i press a button on the toolbar, i want "You pressed button1..." or any other text to be displayed in the RichEdit1 of the Active MDIChild (something like ActiveMDIChild.RichEdit1.Add('sdkfsdh')- only it doesn't work).  Thanks very much for even reading up to here and i know i am very boring but i can't get this to work.
0
kretzschmarCommented:
...
begin
  //just use the conversion (TForm2 is the childformClass here)
  if (ActiveMDIChild is TForm2) then
    TForm2(ActiveMDIChild).RichEdit1.Add('sdkfsdh');
end;

meikl ;-)
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
andrewjbCommented:
You can't do it directly that way. 'ActuveMDIChid' is a TForm. A TForm doesn't have a RichEdit1 component. So you can't do it generically.

Either:

Derive all your MDI child forms from some base class which _does_ have a RichEdit1 component.

Then you could do

TBaseMDIForm( ActiveMDIChlid ).RichEdit1.Add('asldkajslkd');

or, check to see which class the Active chlid is..

if ActiveMDIChild is TFirstChlidForm then
  TFirstChildForm(ActiveMDIChild).RicheEdit1.Add('asdasd');
else if ActiveMDIChlid is TSecondChildForm then
  TSecondChlidForm(...)...
else ...

etc.

depending on how many chlid form class types you've got.

0
andrewjbCommented:
NB "You can't do it directly that way" applies to T-104's last comment, not meikl's !

0
Prototype_T-104Author Commented:
Thanks alot guys you helped me alot!! it works now!!!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.