----boundary-LibPST-iamunique-1107735694_-_-
Content-type: text/plain
> -----Original Message-----
> From: blackbox{([at]})nowhere.xy> Behalf Of Wojtek Skulski
>
> After reading this paragraph I revisited the GrViews and read
> the procedures which handle user interactions. Please have a look.
Thank you for taking the time I'm looking at it right now and my eyes are
glazing over :-)
> It starts with the comment (* Message handling *). It all
> looks pretty bloody. I am shaking my head that I developed
> such a thing. I still have an archive somewhere with all the
> e-mails from Dominik Gruntz, Wolfgang Weck, and Cuno Pfister,
> who all helped me enormously. What is the lesson?
> Not sure. I was much less experienced back then. The
> timestamp in the code says 2001.
>
It all looks pretty hairy to me and I have been writing software
professionally at all levels from assembly language to 4GLs for thirty
years. How is a newbie ever going to get to understand any of this? In
contrast, this sort of thing could be done by a complete novice with less
than a day's guidance in Delphi, VB or Visual Studio.
>
> But you are saying you want the table to fill the entire form?
> This is interesting. If the entire form is filled, then what
> is it needed for?
>
Only the 'entire' form that is not occupied by menus, buttons etc. in the
same way that if you open an Excel Spreadsheet, the number of columns and
rows visible increases when you increase the size of the window. Another
example is Microsoft Outlook which has a left hand area for navigation and a
right hand area for the table - both separately resizable.
This sort of thing is trivial to do in Delphi as you can use 'Panels' to
subdivide your form into separate working areas. You could put the table on
an automatically resizing panel, and have a couple of buttons on another
fixed sized panel anchored to the bottom of the form or the right / left or
top of the form if you prefer. 'Splitter' bars can be used to adjust the
relative sizes of the panels. If you want to go beyond that there are
'frames' but I haven't had to use them as yet. All of this is created in the
'forms designer' - no code has to be written.
If you don't have access to such an IDE but want to try it for yourself,
Microsoft Visual C# Express is available for zero cost:
http://msdn.microsoft.com/vstudio/express/visualcsharp/
They are also going for the youngsters:
http://msdn.microsoft.com/coding4fun/
Unfortunately by giving all of this away for free, Microsoft have made it
very difficult for others to compete. Borland (Delphi) for example is
getting out of the IDE market altogether and is currently looking a buyer
for its complete IDE / Developer tool business.
>
> If you dig in the docu of Properties somewhere in the
> vicinity of these paragraphs then maybe you will find some
> more inspiration.
>
OK - I abandoned the table application a long time ago, but I have got an
almost complete BlackBox AutoCAD slide viewer. That got shelved when I hit
the resizing brick wall. When I revisit that I'll have a real good look at
your code.
>
> > Calling a function written in a different language (and
> different dll)
> > is only fractionally more difficult than calling one in the same
> > language when you are in the .NET environment.
>
> This is a biggie. But it works between .NET languages, does
> it not. How about legacy DLLs that were not developed under .NET?
>
I haven't tried it but it can be done. The magic word is 'interop'. I get
the impression that you have to wrap the legacy code in a COM wrapper to be
able to access it in .NET
I guess I am lucky in that I haven't got many millions of lines of legacy
code or need highly-specialised application-specific libaries (apart from
the WAV recording / sound processing stuff) that I have to maintain. All the
Win32 apps I have written can stay in Win32 - it's going to be around for
another ten years at least.
However, I always keep .NET in mind when writing something completely new.
If it was a web-based app, not a desktop one then it would be .NET for sure.
Some of my own code I've already translated to CP using the Pascal to Oberon
translator, but most legacy code I would need to reuse would be general
purpose 3rd party libraries. The equivalent functionality most likely is
already available in the .NET framework or if not, is already freely
available from 3rd parties.
Chris Burrows
CFB Software
http://www.cfbsoftware.com/gpcp
--- BlackBox
--- send subject HELP or UNSUBSCRIBE to blackbox{([at]})nowhere.xy
----boundary-LibPST-iamunique-1107735694_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS1c
cGFyDQo+IEZyb206IGJsYWNrYm94QG9iZXJvbi5jaCBbbWFpbHRvOmJsYWNrYm94QG9iZXJvbi5j
aF0gT24gXHBhcg0KPiBCZWhhbGYgT2YgV29qdGVrIFNrdWxza2lccGFyDQo+IFxwYXINCj4gQWZ0
ZXIgcmVhZGluZyB0aGlzIHBhcmFncmFwaCBJIHJldmlzaXRlZCB0aGUgR3JWaWV3cyBhbmQgcmVh
ZCBccGFyDQo+IHRoZSBwcm9jZWR1cmVzIHdoaWNoICBoYW5kbGUgdXNlciBpbnRlcmFjdGlvbnMu
IFBsZWFzZSBoYXZlIGEgbG9vay5ccGFyDQpccGFyDQpUaGFuayB5b3UgZm9yIHRha2luZyB0aGUg
dGltZSBJJ20gbG9va2luZyBhdCBpdCByaWdodCBub3cgYW5kIG15IGV5ZXMgYXJlXHBhcg0KZ2xh
emluZyBvdmVyIDotKVxwYXINClxwYXINCj4gSXQgc3RhcnRzIHdpdGggdGhlIGNvbW1lbnQgKCog
TWVzc2FnZSBoYW5kbGluZyAqKS4gSXQgYWxsIFxwYXINCj4gbG9va3MgcHJldHR5IGJsb29keS4g
SSBhbSBzaGFraW5nIG15IGhlYWQgdGhhdCBJIGRldmVsb3BlZCBccGFyDQo+IHN1Y2ggYSB0aGlu
Zy4gSSBzdGlsbCBoYXZlIGFuIGFyY2hpdmUgc29tZXdoZXJlIHdpdGggYWxsIHRoZSBccGFyDQo+
IGUtbWFpbHMgZnJvbSBEb21pbmlrIEdydW50eiwgV29sZmdhbmcgV2VjaywgYW5kIEN1bm8gUGZp
c3RlciwgXHBhcg0KPiB3aG8gYWxsIGhlbHBlZCBtZSBlbm9ybW91c2x5LiBXaGF0IGlzIHRoZSBs
ZXNzb24/XHBhcg0KPiBOb3Qgc3VyZS4gSSB3YXMgbXVjaCBsZXNzIGV4cGVyaWVuY2VkIGJhY2sg
dGhlbi4gVGhlIFxwYXINCj4gdGltZXN0YW1wIGluIHRoZSBjb2RlIHNheXMgMjAwMS5ccGFyDQo+
IFxwYXINClxwYXINCkl0IGFsbCBsb29rcyBwcmV0dHkgaGFpcnkgdG8gbWUgYW5kIEkgaGF2ZSBi
ZWVuIHdyaXRpbmcgc29mdHdhcmVccGFyDQpwcm9mZXNzaW9uYWxseSBhdCBhbGwgbGV2ZWxzIGZy
b20gYXNzZW1ibHkgbGFuZ3VhZ2UgdG8gNEdMcyBmb3IgdGhpcnR5XHBhcg0KeWVhcnMuIEhvdyBp
cyBhIG5ld2JpZSBldmVyIGdvaW5nIHRvIGdldCB0byB1bmRlcnN0YW5kIGFueSBvZiB0aGlzPyBJ
blxwYXINCmNvbnRyYXN0LCB0aGlzIHNvcnQgb2YgdGhpbmcgY291bGQgYmUgZG9uZSBieSBhIGNv
bXBsZXRlIG5vdmljZSB3aXRoIGxlc3NccGFyDQp0aGFuIGEgZGF5J3MgZ3VpZGFuY2UgaW4gRGVs
cGhpLCBWQiBvciBWaXN1YWwgU3R1ZGlvLiBccGFyDQpccGFyDQo+IFxwYXINCj4gQnV0IHlvdSBh
cmUgc2F5aW5nIHlvdSB3YW50IHRoZSB0YWJsZSB0byBmaWxsIHRoZSBlbnRpcmUgZm9ybT9ccGFy
DQo+IFRoaXMgaXMgaW50ZXJlc3RpbmcuIElmIHRoZSBlbnRpcmUgZm9ybSBpcyBmaWxsZWQsIHRo
ZW4gd2hhdCBccGFyDQo+IGlzIGl0IG5lZWRlZCBmb3I/XHBhcg0KPiBccGFyDQpccGFyDQpPbmx5
IHRoZSAnZW50aXJlJyBmb3JtIHRoYXQgaXMgbm90IG9jY3VwaWVkIGJ5IG1lbnVzLCBidXR0b25z
IGV0Yy4gaW4gdGhlXHBhcg0Kc2FtZSB3YXkgdGhhdCBpZiB5b3Ugb3BlbiBhbiBFeGNlbCBTcHJl
YWRzaGVldCwgdGhlIG51bWJlciBvZiBjb2x1bW5zIGFuZFxwYXINCnJvd3MgdmlzaWJsZSBpbmNy
ZWFzZXMgd2hlbiB5b3UgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHdpbmRvdy4gQW5vdGhlclxw
YXINCmV4YW1wbGUgaXMgTWljcm9zb2Z0IE91dGxvb2sgd2hpY2ggaGFzIGEgbGVmdCBoYW5kIGFy
ZWEgZm9yIG5hdmlnYXRpb24gYW5kIGFccGFyDQpyaWdodCBoYW5kIGFyZWEgZm9yIHRoZSB0YWJs
ZSAtIGJvdGggc2VwYXJhdGVseSByZXNpemFibGUuXHBhcg0KXHBhcg0KVGhpcyBzb3J0IG9mIHRo
aW5nIGlzIHRyaXZpYWwgdG8gZG8gaW4gRGVscGhpIGFzIHlvdSBjYW4gdXNlICdQYW5lbHMnIHRv
XHBhcg0Kc3ViZGl2aWRlIHlvdXIgZm9ybSBpbnRvIHNlcGFyYXRlIHdvcmtpbmcgYXJlYXMuIFlv
dSBjb3VsZCBwdXQgdGhlIHRhYmxlIG9uXHBhcg0KYW4gYXV0b21hdGljYWxseSByZXNpemluZyBw
YW5lbCwgYW5kIGhhdmUgYSBjb3VwbGUgb2YgYnV0dG9ucyBvbiBhbm90aGVyXHBhcg0KZml4ZWQg
c2l6ZWQgcGFuZWwgYW5jaG9yZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZm9ybSBvciB0aGUgcmln
aHQgLyBsZWZ0IG9yXHBhcg0KdG9wIG9mIHRoZSBmb3JtIGlmIHlvdSBwcmVmZXIuICdTcGxpdHRl
cicgYmFycyBjYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlXHBhcg0KcmVsYXRpdmUgc2l6ZXMgb2Yg
dGhlIHBhbmVscy4gSWYgeW91IHdhbnQgdG8gZ28gYmV5b25kIHRoYXQgdGhlcmUgYXJlXHBhcg0K
J2ZyYW1lcycgYnV0IEkgaGF2ZW4ndCBoYWQgdG8gdXNlIHRoZW0gYXMgeWV0LiBBbGwgb2YgdGhp
cyBpcyBjcmVhdGVkIGluIHRoZVxwYXINCidmb3JtcyBkZXNpZ25lcicgLSBubyBjb2RlIGhhcyB0
byBiZSB3cml0dGVuLlxwYXINClxwYXINCklmIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byBzdWNo
IGFuIElERSBidXQgd2FudCB0byB0cnkgaXQgZm9yIHlvdXJzZWxmLFxwYXINCk1pY3Jvc29mdCBW
aXN1YWwgQyMgRXhwcmVzcyBpcyBhdmFpbGFibGUgZm9yIHplcm8gY29zdDpccGFyDQpccGFyDQpo
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL3ZzdHVkaW8vZXhwcmVzcy92aXN1YWxjc2hhcnAvXHBh
cg0KXHBhcg0KVGhleSBhcmUgYWxzbyBnb2luZyBmb3IgdGhlIHlvdW5nc3RlcnM6XHBhcg0KXHBh
cg0KaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9jb2Rpbmc0ZnVuL1xwYXINClxwYXINClVuZm9y
dHVuYXRlbHkgYnkgZ2l2aW5nIGFsbCBvZiB0aGlzIGF3YXkgZm9yIGZyZWUsIE1pY3Jvc29mdCBo
YXZlIG1hZGUgaXRccGFyDQp2ZXJ5IGRpZmZpY3VsdCBmb3Igb3RoZXJzIHRvIGNvbXBldGUuIEJv
cmxhbmQgKERlbHBoaSkgZm9yIGV4YW1wbGUgaXNccGFyDQpnZXR0aW5nIG91dCBvZiB0aGUgSURF
IG1hcmtldCBhbHRvZ2V0aGVyIGFuZCBpcyBjdXJyZW50bHkgbG9va2luZyBhIGJ1eWVyXHBhcg0K
Zm9yIGl0cyBjb21wbGV0ZSBJREUgLyBEZXZlbG9wZXIgdG9vbCBidXNpbmVzcy5ccGFyDQpccGFy
DQo+IFxwYXINCj4gSWYgeW91IGRpZyBpbiB0aGUgZG9jdSBvZiBQcm9wZXJ0aWVzIHNvbWV3aGVy
ZSBpbiB0aGUgXHBhcg0KPiB2aWNpbml0eSBvZiB0aGVzZSBwYXJhZ3JhcGhzIHRoZW4gbWF5YmUg
eW91IHdpbGwgZmluZCBzb21lIFxwYXINCj4gbW9yZSBpbnNwaXJhdGlvbi5ccGFyDQo+IFxwYXIN
ClxwYXINCk9LIC0gSSBhYmFuZG9uZWQgdGhlIHRhYmxlIGFwcGxpY2F0aW9uIGEgbG9uZyB0aW1l
IGFnbywgYnV0IEkgaGF2ZSBnb3QgYW5ccGFyDQphbG1vc3QgY29tcGxldGUgQmxhY2tCb3ggQXV0
b0NBRCBzbGlkZSB2aWV3ZXIuIFRoYXQgZ290IHNoZWx2ZWQgd2hlbiBJIGhpdFxwYXINCnRoZSBy
ZXNpemluZyBicmljayB3YWxsLiBXaGVuIEkgcmV2aXNpdCB0aGF0IEknbGwgaGF2ZSBhIHJlYWwg
Z29vZCBsb29rIGF0XHBhcg0KeW91ciBjb2RlLiBccGFyDQpccGFyDQo+IFxwYXINCj4gPiBDYWxs
aW5nIGEgZnVuY3Rpb24gd3JpdHRlbiBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZSAoYW5kIFxwYXIN
Cj4gZGlmZmVyZW50IGRsbCkgXHBhcg0KPiA+IGlzIG9ubHkgZnJhY3Rpb25hbGx5IG1vcmUgZGlm
ZmljdWx0IHRoYW4gY2FsbGluZyBvbmUgaW4gdGhlIHNhbWUgXHBhcg0KPiA+IGxhbmd1YWdlIHdo
ZW4geW91IGFyZSBpbiB0aGUgLk5FVCBlbnZpcm9ubWVudC5ccGFyDQo+IFxwYXINCj4gVGhpcyBp
cyBhIGJpZ2dpZS4gQnV0IGl0IHdvcmtzIGJldHdlZW4gLk5FVCBsYW5ndWFnZXMsIGRvZXMgXHBh
cg0KPiBpdCBub3QuIEhvdyBhYm91dCBsZWdhY3kgRExMcyB0aGF0IHdlcmUgbm90IGRldmVsb3Bl
ZCB1bmRlciAuTkVUP1xwYXINCj4gXHBhcg0KXHBhcg0KSSBoYXZlbid0IHRyaWVkIGl0IGJ1dCBp
dCBjYW4gYmUgZG9uZS4gVGhlIG1hZ2ljIHdvcmQgaXMgJ2ludGVyb3AnLiBJIGdldFxwYXINCnRo
ZSBpbXByZXNzaW9uIHRoYXQgeW91IGhhdmUgdG8gd3JhcCB0aGUgbGVnYWN5IGNvZGUgaW4gYSBD
T00gd3JhcHBlciB0byBiZVxwYXINCmFibGUgdG8gYWNjZXNzIGl0IGluIC5ORVRccGFyDQpccGFy
DQpJIGd1ZXNzIEkgYW0gbHVja3kgaW4gdGhhdCBJIGhhdmVuJ3QgZ290IG1hbnkgbWlsbGlvbnMg
b2YgbGluZXMgb2YgbGVnYWN5XHBhcg0KY29kZSBvciBuZWVkIGhpZ2hseS1zcGVjaWFsaXNlZCBh
cHBsaWNhdGlvbi1zcGVjaWZpYyBsaWJhcmllcyAoYXBhcnQgZnJvbVxwYXINCnRoZSBXQVYgcmVj
b3JkaW5nIC8gc291bmQgcHJvY2Vzc2luZyBzdHVmZikgdGhhdCBJIGhhdmUgdG8gbWFpbnRhaW4u
IEFsbCB0aGVccGFyDQpXaW4zMiBhcHBzIEkgaGF2ZSB3cml0dGVuIGNhbiBzdGF5IGluIFdpbjMy
IC0gaXQncyBnb2luZyB0byBiZSBhcm91bmQgZm9yXHBhcg0KYW5vdGhlciB0ZW4geWVhcnMgYXQg
bGVhc3QuIFxwYXINClxwYXINCkhvd2V2ZXIsIEkgYWx3YXlzIGtlZXAgLk5FVCBpbiBtaW5kIHdo
ZW4gd3JpdGluZyBzb21ldGhpbmcgY29tcGxldGVseSBuZXcuXHBhcg0KSWYgaXQgd2FzIGEgd2Vi
LWJhc2VkIGFwcCwgbm90IGEgZGVza3RvcCBvbmUgdGhlbiBpdCB3b3VsZCBiZSAuTkVUIGZvciBz
dXJlLlxwYXINClNvbWUgb2YgbXkgb3duIGNvZGUgSSd2ZSBhbHJlYWR5IHRyYW5zbGF0ZWQgdG8g
Q1AgdXNpbmcgdGhlIFBhc2NhbCB0byBPYmVyb25ccGFyDQp0cmFuc2xhdG9yLCBidXQgbW9zdCBs
ZWdhY3kgY29kZSBJIHdvdWxkIG5lZWQgdG8gcmV1c2Ugd291bGQgYmUgZ2VuZXJhbFxwYXINCnB1
cnBvc2UgM3JkIHBhcnR5IGxpYnJhcmllcy4gVGhlIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBt
b3N0IGxpa2VseSBpc1xwYXINCmFscmVhZHkgYXZhaWxhYmxlIGluIHRoZSAuTkVUIGZyYW1ld29y
ayBvciBpZiBub3QsIGlzIGFscmVhZHkgZnJlZWx5XHBhcg0KYXZhaWxhYmxlIGZyb20gM3JkIHBh
cnRpZXMuXHBhcg0KXHBhcg0KQ2hyaXMgQnVycm93c1xwYXINCkNGQiBTb2Z0d2FyZVxwYXINCmh0
dHA6Ly93d3cuY2Zic29mdHdhcmUuY29tL2dwY3BccGFyDQpccGFyDQotLS0gQmxhY2tCb3hccGFy
DQotLS0gc2VuZCBzdWJqZWN0IEhFTFAgb3IgVU5TVUJTQ1JJQkUgdG8gYmxhY2tib3hAb2Jlcm9u
LmNofX0A4jIDQ3RleAVBAQ==
----boundary-LibPST-iamunique-1107735694_-_---
Received on Wed May 24 2006 - 08:46:12 UTC