Hi All, I’m not happy to abuse of your help but since I’m an autodidact I really need any of your good hint about a question that’s pretty hard to me.
1* The Scope
I need to dynamically Append a series of dynamically created NewObject*n Into a DisplayArea. Each NewObjects holds a NewPicture as well as a NewText that are dinamically passed to the NewObjects at the moment of creation.
Actually I already do that adding CanvasObject into a CanvasContainer following the Example / ObjectsInCanvas / Provided by Xojo.
2* My Doubts
The Example / ObjectsInCanvas works really well for what concerns the dynamical creation / addiction / distruction / repositioning of the CanvasObject BUT it seems to limit me when I need for a deeper interaction with the NewObjects contents; for example when I need to change the Picture or even resize the Text the Object contains.
3* My Question to you
Should I really take in consideration the use of CanvasObject or I should be better figuring out the same implant stucture using ContainerControls instead of CanvasObjects?
Please remember I’m an autodidact if my question looks excessively stupid at your eyes but I feel like the ContainerControl gives to me the best chance to direclty interact with its contents, I’m wrong?
In order to figure out how the new implant should be set, do you know about an example like “Example/ObjectsInCanvas” I could consider as reference? I’m not sure I’m able to achieve the same behaviour I already got with the current approach after such a radical modify of the implant.
Do yourself one big favour and read “Expanding Objects - OOP makes enhancing software easy” on page48ff in xDev 12.5. In this beginner’s article Marc writes an object oriented drawing program, and it will really open your eyes to how to do it very easily. Nothing I’ve ever read helped me more.
Basically you define classes (like a rectangle, a picture, text, or a protein structure) that know how to draw themselves and react to mouse clicks (selection, moving, etc). It is sooo much easier than you think … and all the objects are simply stored as an array of the canvas, and you can add or remove them easily.
It sounds like an awesome solution and I can also remotely imagine how it could work now that you are describing it. If you got a minimal example to share with me, please do it, so that I can figure out how to unlock my code development at this crucial point.
Dear Markus, the SimpleDraw 2018 works as expected, extremely efficient!
Despite that I’m encountering difficulties when trying to directly access to the SpecificClassObject properties at once, without a particular object is selected, as I found no example cases in which it clearly happens.
Maybe you’ll agree to give me an extra tip on this.
// Remove Object Method, This method exploits the comparison of Objects() Positions.
Var j, Indexes(), Lefts() As Integer
// For All Objects Indexes
For j = ObjectList.LastRowIndex DownTo 0 Step 1
// If Objects(index).Property = LastWordCanc << Here I'm encountering problems
If Objects(j).Caption = LastWordCanc Then
Indexes.Add j
Lefts.Add Objects(j).Left
End If
Next
// Sort the matches according to the .Left property
Lefts.SortWith( Indexes() )
// Remove the one with the greatest value
ObjectList.Remove ( Indexes( Lefts.LastRowIndex ) )
MyDrawing.Remove( Indexes( Lefts.LastRowIndex ) )
Selection = -1
Refresh
In the remote case someone is looking for this specific case based on SimpleDraw 2018 I found the way to directly access the property of a SomeTypeClassObject.
For j = ObjectList.LastRowIndex DownTo 0 Step 1
If SomeTypeClassObject(MyDrawing.Lookup(ObjectList(j), Nil)).TheCaption = LastWordCanc Then
// TheCaption is property of SomeTypeClassObject at the Index Value of Integer j
End If
Next