Page 1 of 1

AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP GUI)

Posted: 30 Jan 2014, 17:56
by fincs

AFC is a thin object-oriented wrapper around some of AutoHotkey's functionality. It mainly takes care of wrapping long-time present commands and functions that use old and quirky paradigms into a saner and cleaner class-based API.

AFC is designed to be modular, and to be as direct as possible with the original API. This translates to not having otherwise obvious properties that are implemented through flexi-lists. I believe that the performance and code size penalty is not justified.

AFC provides:
  • Structured class-based entry points.
  • Default base object, which provides OOP syntax sugar for non-object values (such as str.Length)
AFC will provide in the future:
  • Menus
  • Timers
  • Hotkeys and hotstrings (perhaps?)

Download - GitHub - Documentation (Download documentation)

AFC's GUI API gets completely rid of:
  • g-labels and Gui event labels.
  • Associated variable names.
  • Gui names/numbers.
  • Confusing subcommands.
Feel free to comment. Hope you enjoy! :D

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 30 Jan 2014, 23:26
by Guest10
any examples using AFC? :D

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 31 Jan 2014, 05:47
by fincs
The downloadable package contains 4 examples, their source can also be found online at GitHub.

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 31 Jan 2014, 08:32
by Guest10
thanks, looks like includes library, documentation and examples all in one package.

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 26 Nov 2014, 16:34
by hd0202
Thank you for this wunderful class (and for the wunderful SciTE4AutoHotkey, too) !!!

In order to learn about OOP with AutoHotkey and to get some experience I have converted the second (full) example of the TreeView section in the help and made some additions (folders and icons in the listview and doubleclick for treeview, listview and statusbar) and will share it here with this community:

During this development I got the following error message:

Debugging with SciTE4AutoHotkey showed that the field in the "tv" object contained "TreeView", but the field "ctrlName" is empty.

This also occurred with the listview and can also be produced with the AFC "Example-Many-Controls.ahk". Additional the event handlers like OnDoubleClick and OnSelect also do not work though the labels are contained in the objects. I think it is them same cause: when the handler is called the label field is empty. On the other side, Button, Edit, UpDown and Statusbar in the example (and Progress from the other example) work without problems.

In these tests I used V1.1.16.04 to V1.1.16.06 in the modes A32, U32 and U64 on XP, Win7 and Win8.1.

Then I checked V1.1.14.03, my previous AHK version, in the same modes on the same systems and it works, so that I could finish my development.

I think this is a bug in the last versions and I wonder if it should be posted in the appropriate section?

For the above noted errors I found a workaround with global variables and a change in CWindow class, but this does not work for event handlers.


Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 08 Dec 2014, 00:39
by hd0202

did anyone of the nearly 150 viewers test my code or fincs' example?

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 09 Dec 2014, 15:31
by T-Rock
First of all thank you for sharing this cool classes.

I can can confirm the error with ListView and the problem with the ListView Events, which do not work.
I am using V1.1.16.05 U32 with Win7.
But I think I made it work with the following changes:
I changed in the file CCtrlListView.ahk the line 16 from
static __CtrlName := "ListView"
__CtrlName := "ListView"
This is somehow related to the sub class __Get (line 177). If you comment the sub class, the static works.

To make the events working, I changed in the file CWindow.ahk the line 444 from
oCtrl.OnEvent.(__CWindow_GetGui(), oCtrl, A_GuiEvent, A_EventInfo)
oCtrl.OnEvent(__CWindow_GetGui(), oCtrl, A_GuiEvent, A_EventInfo)
by removing the second dot, which with my understanding changes it from a function reference to a method call.
With this change I had to change also the line 480 in the file CCtrlListView.ahk from
OnEvent(oCtrl, guiEvent, eventInfo)
OnEvent(oGui, oCtrl, guiEvent, eventInfo)
Because the hidden "this" did not work here.
Therefore I changed also everywhere in this method "this" to "oGui".

This works for me, but maybe somebody can verify what I did (fincs?).
By the way this is a great example, which made me learning a lot about many specials around classes by studying it. ;)

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 09 Dec 2014, 17:09
by fincs
I suspect this to be an AHK bug.

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 09 Dec 2014, 21:26
by Joe Glines
My only complaint is that this wasn't available a few years ago when I was playing with guis. This will definitely make it much quicker to create new scripts and keep them updated. Thanks fincs! :D

Re: AFC - AutoHotkey Foundation Classes v0.1 (Includes OOP G

Posted: 12 Dec 2014, 15:50
by hd0202
I have a gui with 10 listviews as tabs like

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

and I use the following subroutine, triggered by a menu, to enable the first field to inline editing:

Code: [Select all] [Download] GeSHi © Codebox Plus

gui, listview, zlistview%ztab%
RowNumber := LV_GetNext()
lv_modify(rownumber, "Focus")
hlistview := hlistview%ztab%
sendmessage, 0x1017, rownumber - 1, 0, , ahk_id %hlistview% ; lvm_editlabela
I am converting this code to AutoHotkey Foundation Classes, and I have problems to get the value for ahk_id in the sendmessage command.

Here is part of my CWindow class

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

Can anyone here please lead me to the right direction? Thank you in advance.