Lazarus

Programming => General => Topic started by: andyf97 on April 01, 2023, 09:12:29 am

Title: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: andyf97 on April 01, 2023, 09:12:29 am
How to change the properties of 32 ECSliders or other same components from one procedure

Actually all the parameters apart from Top and Left will be the same.

I was trying this way but it fails to set them obviously because I am a bit dumb, the ECSLiders are all on form1.

Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with ECSlider1.Knob do
  4.      BevelWidth:=2;
  5.      Color:=clHighlight;
  6.      Cursor:=crHandpoint;
  7.      Height:=32;
  8.      Style := eosButton;
  9.      TickMarkCount:=1;
  10.      TickMarkDesign:=etdSimple;
  11.      TickmarkSpacing:=2;
  12.      TickmarkStyle:=etsSolid;
  13.      Width:=40;
  14. end;  
  15.  

         
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Thaddy on April 01, 2023, 09:19:43 am
Use the sender parameter.
Code: Pascal  [Select][+][-]
  1. if sender is TSomeControl then with sender as TSomeControl do.....
  2. // or with hardcast instead of softcast:
  3. if sender is TSomeControl then with TSomeControl(sender) do....
Such code makes it type specific, not instance specific, so you can handle any or all of the sliders from the same handler and you can even distinguish between all instances by accessing the control names, since they must be unique.

(Btw: this is also how it should be done. )
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: KodeZwerg on April 01, 2023, 12:15:00 pm
How to change the properties of 32 ECSliders or other same components from one procedure

Actually all the parameters apart from Top and Left will be the same.

I was trying this way but it fails to set them obviously because I am a bit dumb, the ECSLiders are all on form1.

Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with ECSlider1.Knob do
  4.      BevelWidth:=2;
  5.      Color:=clHighlight;
  6.      Cursor:=crHandpoint;
  7.      Height:=32;
  8.      Style := eosButton;
  9.      TickMarkCount:=1;
  10.      TickMarkDesign:=etdSimple;
  11.      TickmarkSpacing:=2;
  12.      TickmarkStyle:=etsSolid;
  13.      Width:=40;
  14. end;  
  15.  

         
I guess you are missing a begin/end, just a guess, I do not have that component.
Code: Pascal  [Select][+][-]
  1. with ECSlider1.Knob do
  2.   begin
  3.      BevelWidth:=2;
  4.      Color:=clHighlight;
  5.      Cursor:=crHandpoint;
  6.      Height:=32;
  7.      Style := eosButton;
  8.      TickMarkCount:=1;
  9.      TickMarkDesign:=etdSimple;
  10.      TickmarkSpacing:=2;
  11.      TickmarkStyle:=etsSolid;
  12.      Width:=40;
  13.   end;
  14. end;  
  15.  
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Thaddy on April 01, 2023, 12:39:59 pm
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with ECSlider1.Knob do  // Seriously???? That is all wrong in this context! Use the sender. As I already explained
  4.  
BTW you are fired.  >:D O:-)
We are not here to promote the screendrawers guild.
We are here to promote proper language use.
(You are free to insult me of the use of with, btw. Not clean enough)
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: KodeZwerg on April 01, 2023, 12:46:07 pm
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with ECSlider1.Knob do  // Seriously???? That is all wrong in this context! Use the sender. As I already explained
  4.  
BTW you are fired.  >:D O:-)
Sender inside a ButtonClick, what will it be? Let me think... maybe a button?
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Thaddy on April 01, 2023, 12:50:31 pm
Sender inside a ButtonClick, what will it be? Let me think... maybe a button?
Wrong again, even more wrong:
You can connect eventhandlers with the same signature to all and everything with that signature.
That's why there is is and as....
If you do not understand it, ask again.

(Dead giveaway: give your event handlers and controls meaningful names)
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: KodeZwerg on April 01, 2023, 12:55:31 pm
I am neither here to insult nor to challenge you.
I am fired and out of this topic, it is yours, enjoy.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: wp on April 01, 2023, 01:58:54 pm
How to change the properties of 32 ECSliders or other same components from one procedure
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with ECSlider1.Knob do
  4.      BevelWidth:=2;
  5.      Color:=clHighlight;
  6.      Cursor:=crHandpoint;
  7.      Height:=32;
  8.      Style := eosButton;
  9.      TickMarkCount:=1;
  10.      TickMarkDesign:=etdSimple;
  11.      TickmarkSpacing:=2;
  12.      TickmarkStyle:=etsSolid;
  13.      Width:=40;
  14. end;  
  15.  
Do I understand correctly? There are 32 ECSliders on a form, and there is a button with which you want to change all properties (except for Left and Top) of the ECSliders?

In this case I'd define an array for all sliders and store the sliders in it:
Code: Pascal  [Select][+][-]
  1. type
  2.   TForm1 = class(TForm)
  3.     procedure FormCreate(Sender: TObject);
  4.   private
  5.     Sliders: array[0..31] of TECSlider;
  6.   end;
  7.  
  8. procedure TForm1.FormCreate(Sender: TObject);
  9. begin
  10.   Sliders[0] := ECSlider1;
  11.   Sliders[1] := ECSlider2;
  12.   ...
  13.   Sliders[31] := ECSlider32;
  14. end;

Alternatively, and a bit more clever, you could create the sliders at runtime (not in the Object Inspector) and assign them into the array immediately:

Code: Pascal  [Select][+][-]
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   i: Integer;
  4.   slider : TECSlider;
  5.   x, y: Integer;
  6. begin
  7.   x := 12;
  8.   y := 12;
  9.   for i := Low(Sliders) do High(Sliders) do
  10.   begin
  11.     Sliders[i] := TECSlider.Create(self);
  12.     Sliders[i].Left := x;
  13.     Sliders[i].Top := y;
  14.     Sliders[i].Parent := self;
  15.     // ... set other properties here
  16.     y := y + Sliders[i].Height + 8;
  17.   end;
  18. end;
 
In the OnClick handler of the button I'd write a loop which iterates over all sliders in the array and sets their properties as requested.
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   i: Integer;
  4. begin
  5.   for i := Low(Sliders) to High(Sliders) do
  6.     with Sliders[i].Knob do
  7.     begin
  8.       BevelWidth:=2;
  9.       Color:=clHighlight;
  10.       Cursor:=crHandpoint;
  11.       Height:=32;
  12.       Style := eosButton;
  13.       TickMarkCount:=1;
  14.       TickMarkDesign:=etdSimple;
  15.       TickmarkSpacing:=2;
  16.       TickmarkStyle:=etsSolid;
  17.       Width:=40;
  18.     end;
  19.  

Thaddy, please stop playing the boss here. A boss insulting his employees is not a good boss anyway.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Thaddy on April 01, 2023, 02:18:17 pm
Thaddy, please stop playing the boss here. A boss insulting his employees is not a good boss anyway.
Well, if even you do not write proper code (using the sender parameter), what else can I do?
Although I agree with your comment, there is a limit. Someone has to take responsability. Otherwise you are not operating a solid team. This is like raising children, not about who's boss...
Use the sender and don't blame me. Pretty much how the language is designed.
Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
  9.  
  10. type
  11.  
  12.   { TForm1 }
  13.  
  14.   TForm1 = class(TForm)
  15.     Button1: TButton;
  16.     Button2: TButton;
  17.     Button3: TButton;
  18.     Button4: TButton;
  19.     procedure AnyButtonClick(Sender: TObject);
  20.   private
  21.  
  22.   public
  23.  
  24.   end;
  25.  
  26. var
  27.   Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.lfm}
  32.  
  33. { TForm1 }
  34.  
  35. procedure TForm1.AnyButtonClick(Sender: TObject);
  36. begin
  37.   if sender is TButton then with TButton(sender) do
  38.      Caption := 'I am '+ Tbutton(sender).Name // and you have full control over the instance
  39.   else
  40.     Showmessage('I am a control but not really relevant, it seems');
  41. end;
  42.  
  43. end.
Pardon me for not giving the controls meaningful names. You know I would have done so.

If you can write the code in a one-liner and already explained this, then why complain?

Point is that it does not matter how many sliders,or in this case buttons, are there... See?
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: wp on April 01, 2023, 02:52:03 pm
You are making assumptions about the OPs questions which are not clearly expressed. Read the first post. Are you sure that there are multiple buttons on the form? The way I understand the question there is only a single button which is supposed to modify on several control, and there is absolute no need to check the sender - a typical case for the {%H-} directive. OK - I am fired, too...
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: dseligo on April 01, 2023, 02:55:25 pm
I would do it like this:

Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var i: Integer;
  3. begin
  4.   For i := 0 to Pred(ControlCount) do
  5.     If Controls[i] is TECSlider then
  6.       With (Controls[i] as TECSlider).Knob do begin
  7.         BevelWidth:=2;
  8.         Color:=clHighlight;
  9.         Cursor:=crHandpoint;
  10.         Height:=32;
  11.         Style := eosButton;
  12.         TickMarkCount:=1;
  13.         TickMarkDesign:=etdSimple;
  14.         TickmarkSpacing:=2;
  15.         TickmarkStyle:=etsSolid;
  16.         Width:=40;
  17.       end;
  18. end;
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: wp on April 01, 2023, 02:58:41 pm
Yes, but only if there are no other TECSliders on the form (which is highly probable, though)
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: dseligo on April 01, 2023, 03:00:51 pm
Use the sender parameter.

He can't use Sender, because Sender is TButton and he wants to change TECSlider with clicking on the button. Sender will never be TECSlider.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Thaddy on April 01, 2023, 03:03:02 pm
Use the sender parameter.

He can't use Sender, because Sender is TButton and he wants to change TECSlider with clicking on the button. Sender will never be TECSlider.
Any control can be identified. I could also use TECSlider.... You are missing the point.
I think I retire .. 8-)
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: jamie on April 01, 2023, 03:25:43 pm
put all the controls inside of a TFlowPanel.

From there, you have a list of controls that you can step through via the ControlList property.

etc.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Thaddy on April 01, 2023, 03:30:58 pm
That is the wrong approach. Seriously, do it like my example. How many more stupid answers we get, how many more beginners questions we have to answer.  >:D >:D >:D >:D  O:-) :-*
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: dseligo on April 01, 2023, 03:51:30 pm
That is the wrong approach. Seriously, do it like my example. How many more stupid answers we get, how many more beginners questions we have to answer.  >:D >:D >:D >:D  O:-) :-*

OK, I made test project with 32 ECsliders.

Please show how would you change their styles using Sender when pressing one of the buttons.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Paolo on April 01, 2023, 03:57:42 pm
Quote
Please show how would you change their styles using Sender when pressing one of the buttons.
I'm curious too
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: wp on April 01, 2023, 03:59:01 pm
That is the wrong approach. Seriously, do it like my example.
You only showed pseudo-code, unrelated to the question.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Blaazen on April 01, 2023, 04:10:31 pm
Hi,

I hope ECSliders will work well for you. I assume you design some equalizer or so.
I'd group them on panel and use:
Code: Pascal  [Select][+][-]
  1. var i: Integer;
  2. begin
  3.   for i:=0 to Panel1.ControlCount-1 do
  4.     if Panel1.Controls[i] is TECSlider then
  5.       with TECSlider(Panel1.Controls[i]) do
  6.         begin
  7.           BeginUpdate;
  8.           //do the job here
  9.           EndUpdate();
  10.         end;
Definitely use the BeginUpdate - EndUpdate pair. It will reduce many recalculation (4 per slider).
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Josh on April 01, 2023, 04:38:55 pm
demo attached

10 sliders / faders created like an eq, timer animated them, start stop reset button.
sliders/faders called by name, with some safety checks.

added project unit code below, fo those without tecslider installed

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
  9.   ECSlider;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     btn_start: TButton;
  17.     btn_stop: TButton;
  18.     btn_reset: TButton;
  19.     ECSlider_EQ1: TECSlider;
  20.     ECSlider_EQ10: TECSlider;
  21.     ECSlider_EQ2: TECSlider;
  22.     ECSlider_EQ3: TECSlider;
  23.     ECSlider_EQ4: TECSlider;
  24.     ECSlider_EQ5: TECSlider;
  25.     ECSlider_EQ6: TECSlider;
  26.     ECSlider_EQ7: TECSlider;
  27.     ECSlider_EQ8: TECSlider;
  28.     ECSlider_EQ9: TECSlider;
  29.     Timer1: TTimer;
  30.     procedure btn_resetClick(Sender: TObject);
  31.     procedure btn_startClick(Sender: TObject);
  32.     procedure btn_stopClick(Sender: TObject);
  33.     procedure FormCreate(Sender: TObject);
  34.     procedure Timer1Timer(Sender: TObject);
  35.   private
  36.  
  37.   public
  38.  
  39.   end;
  40.  
  41. var
  42.   Form1: TForm1;
  43.   EQ_Animate:Boolean=False;
  44.   Eq_Reset:Boolean=True;
  45.  
  46. implementation
  47.  
  48. {$R *.lfm}
  49.  
  50. { TForm1 }
  51.  
  52. procedure TForm1.Timer1Timer(Sender: TObject);
  53. Const Eq_Name='ECSlider_EQ';
  54. Loop:Integer=1;
  55. begin
  56.   If ((EQ_Animate) or (Eq_Reset)) then   // only run code if animating or resettting
  57.   begin
  58.     // As We have created and named them we can assume they are TECSlider
  59.     Loop:=1;
  60.     While Findcomponent(Eq_Name+InttoStr(Loop))<>Nil Do
  61.     begin
  62.       // If you want an additional Safety Check then Add
  63.       // If Findcomponent(Eq_Name+InttoStr(Loop)) is TECSlider then
  64.       With Findcomponent(Eq_Name+InttoStr(Loop)) as TECSlider Do
  65.       Begin
  66.         BeginUpdate;
  67.         if EQ_Animate then position:=round(Random(round(Max)));
  68.         if Eq_Reset then position:=60;
  69.         EndUpDate;
  70.       end;
  71.       Inc(Loop);
  72.     end;
  73.     Eq_Reset:=False;
  74.     Application.ProcessMessages;  // process messageswill only be called if code is run.
  75.   end;
  76.  
  77. end;
  78.  
  79. procedure TForm1.btn_startClick(Sender: TObject);
  80. begin
  81.   EQ_Animate:=True;
  82. end;
  83.  
  84. procedure TForm1.btn_resetClick(Sender: TObject);
  85. begin
  86.   EQ_Animate:=false;
  87.   Eq_Reset:=True;
  88. end;
  89.  
  90. procedure TForm1.btn_stopClick(Sender: TObject);
  91. begin
  92.   EQ_Animate:=False;
  93. end;
  94.  
  95. procedure TForm1.FormCreate(Sender: TObject);
  96. begin
  97.   Randomize;
  98. end;
  99.  
  100. end.  

may hellp
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: jamie on April 01, 2023, 05:09:52 pm
That is the wrong approach. Seriously, do it like my example. How many more stupid answers we get, how many more beginners questions we have to answer.  >:D >:D >:D >:D  O:-) :-*

 Thaddy the smoking jerk.

 I know for a fact that what I suggested works because I've done it a few times.

 All I see here is massive, bloated code and those that will defend their idea to the ends of the earth, even if it takes everyone with them.

 I am glad I still have choices to use my own methods to reduce code glut with increases performance.

@Thaddy on the other hand: If it still does not work, just add some more non working code on top of the existing bloat that he tries to push on everyone.

  What a place, it's almost as bad as the local pub after work stop off.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: andyf97 on April 01, 2023, 10:12:23 pm
That is what I have done so far but its really complicated with some fields changed by value and some other by text:

     TickmarkStyle:=etsSolid;
     Width:=40;

There loads of parameters for the ECSliders, maybe 50. So what I want to do is have one of them like master settings that the rest follow, a bit learning curve to do. 



put all the controls inside of a TFlowPanel.

From there, you have a list of controls that you can step through via the ControlList property.

etc.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: jamie on April 01, 2023, 10:25:45 pm
if Implemented, and I can't say if it is or not, the ECSlider.Assign(From_Another_ECSlider); should cover most of the settings.

 After each one however, you'll most likely need to touch up the LEFT,TOP of the control so it doesn't overlap.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Blaazen on April 01, 2023, 11:07:37 pm
No, none of EC-Controls have implemented Assign.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: andyf97 on April 01, 2023, 11:09:53 pm
Thanks Jamie,

How does that assign work, I cannot find info about it.

if Implemented, and I can't say if it is or not, the ECSlider.Assign(From_Another_ECSlider); should cover most of the settings.

 After each one however, you'll most likely need to touch up the LEFT,TOP of the control so it doesn't overlap.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: Blaazen on April 02, 2023, 12:04:53 am
Assign, if implemented, copies properties or fields of one instance of class to another. It does not have to be trivial, look for example to TFont.Assign().
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: cdbc on April 02, 2023, 07:47:18 am
Hi
If "TECSlider" is a descendant of TPersistent, then it implements the FPObserved interface...
If you are making one slider the "Master", then all you have to do, is implement an Observer class that implements the "FPObserver" interface (easy peasy, it's 1 method) and the "assign" method (which you'll have to write yourself, but only once) for each "Listening" ECSlider. On startup of your app, you create the observers and "Attach" them all to the "Master", and Vupti "Bob's your uncle".
Maybe something like this:
Code: Pascal  [Select][+][-]
  1.   { TObserver ~ observer pattern }  (* ATTENTION: {$INTERFACES CORBA} = no ref-count *)
  2.   TECObserver = class(TObject,IFPObserver)
  3.   protected
  4.     fActiveECSlider: TECSlider;
  5.     procedure Assign; { you'll get the "source" in aSender parameter }
  6.   public
  7.     constructor Create(const anActiveECSlider: TECSlider);
  8.     destructor Destroy; override;
  9.     Procedure FPOObservedChanged(aSender: TObject;Operation: TFPObservedOperation;Data: Pointer);
  10.     property ActiveECSlider: TECSlider read fActiveECSlider write fActiveECSlider;
  11.   end; { TECObserver }
  12.  
...Or maybe one observer with an array of ECSliders?!?
Hth - Regards Benny
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: andyf97 on April 02, 2023, 07:58:08 am
Dseligo, Yours absolutely does the job, I downloaded your example project that you kindly shared, it also compiles perfectly.

So I copied the code from 'your button 1' and placed it into one of my buttons 'button 2'.

I get instant compile errors, attached an image.

This likely indicates that something is wrong with wither my whole project, or Lazarus is miss-configured. I suspect my project is most likely

I am wondering if my Lazarus or EC-Controls is not installed/configured properly, I am actually having consistent issues with Lazarus since trying to edit an old application I made with Delphi3 in 1997. Actually I have a bunch of applications that I made over the years with VB3..6, Delphi3..10, Basic that I started to replicate in Lazarus.  So that I use one standard platform.


I would do it like this:

Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var i: Integer;
  3. begin
  4.   For i := 0 to Pred(ControlCount) do
  5.     If Controls[i] is TECSlider then
  6.       With (Controls[i] as TECSlider).Knob do begin
  7.         BevelWidth:=2;
  8.         Color:=clHighlight;
  9.         Cursor:=crHandpoint;
  10.         Height:=32;
  11.         Style := eosButton;
  12.         TickMarkCount:=1;
  13.         TickMarkDesign:=etdSimple;
  14.         TickmarkSpacing:=2;
  15.         TickmarkStyle:=etsSolid;
  16.         Width:=40;
  17.       end;
  18. end;
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: af0815 on April 02, 2023, 08:18:24 am
search where eosButton, edtSimple and etsSolid is defined. Such an error is normal you only have not all needed units bound.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: dsiders on April 02, 2023, 09:03:32 am
...
So I copied the code from 'your button 1' and placed it into one of my buttons 'button 2'.
I get instant compile errors, attached an image.
...

All of the highlighted errors are defined in the ectypes.pas unit. Does that unit appear in your uses clause?
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: dseligo on April 02, 2023, 10:30:26 am
...
So I copied the code from 'your button 1' and placed it into one of my buttons 'button 2'.
I get instant compile errors, attached an image.
...

All of the highlighted errors are defined in the ectypes.pas unit. Does that unit appear in your uses clause?

Exactly, just add ECTypes to the uses section.
Title: Re: Anyone know how to change the properties of 32 SlideBars from one proceedure
Post by: andyf97 on April 02, 2023, 12:21:06 pm
Adding add ECTypes to the uses solved the Slider errors I was having, but re-installing Lazarus solved also a lot of other issues.

Up and running now, thanks to you all for your help.
TinyPortal © 2005-2018