Thread Rating:
  • 3 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Created QM video tutorials
#1
I just uploaded a series of tutorials. (EDITED TOPIC TITLE: video tutorials are not limited to beginners)
The total length is about 9 hours if you include the virtualbox and demonstration tutorial.

Go to the below google drive folder which is called "QM" and read the "!README" document.
Google drive folder: https://drive.google.com/drive/folders/ ... VhBSmFId3M
Within that google drive folder you will find "index_1" and "index_2"
open either "1" or "2" to get a list of links to all the tutorials.

If you want to know what I covered, read the content within the folder "yt_pagelinks"
yt_pagelinks folder: https://drive.google.com/drive/folders/ ... 1FMVjY2Slk

I also created a "Demonstration" video which covers what QM is and how it works:
QM demonstration: https://www.youtube.com/watch?v=3FOR-I3QJ8w
I felt this was needed because when you want to explain QM to another potential user
a video might give a clear picture of what QM is and how it works.
So if you want to cut down the explanation time to another person, just give a link to the video.

Finally there is also a virtualbox tutorial which explains how to install and setup
virtualbox using virtual machines provided by Microsoft itself.
It explains Installing virtualbox, downloading and setting up a virtual machine, Configuring and some extra
information. Use this tutorial to begin with if you absolutely are unsure about programming and using a tool
like Quick Macro's.

ALL info from the tutorial is done from my point of view and is NOT THE absolute way to approach things.
I might have explained many things wrong or many things might have explained better.
I just wanted to give beginning users something to begin with and get them to a reasonable level in a shorter time.
(If that is even possible with this tutorial).

All these tutorials are English text annotated and not voice narrated.
And all these tutorials require a lot of pausing as soon as the yellow text annotation appear.
The time they appear might not be long enough to read all the text.


EDIT 1: The current tutorials are deleted. I will reupload text corrected tutorials in the coming days.
EDIT 2: The "new" tutorials:
EDIT 3: qmtut 25 (video 25/25) has been deleted and new one uploaded. (due to some images overlapping text)

qm demo: https://www.youtube.com/watch?v=RS8N-ThDF-Y
qmtut vbox: https://www.youtube.com/watch?v=lWIBBwT7cfA
qmtut 0 INTRO: https://www.youtube.com/watch?v=x8PE6s6IeM0
qmtut 1: https://www.youtube.com/watch?v=SN5q5Al1yjY
qmtut 2: https://www.youtube.com/watch?v=3XpALz87hso
qmtut 3: https://www.youtube.com/watch?v=ihsu8TDA7o0
qmtut 4: https://www.youtube.com/watch?v=01IjEfMO-EI
qmtut 5: https://www.youtube.com/watch?v=g8XSSa-GiVo
qmtut 6: https://www.youtube.com/watch?v=x4Q6p3VYs4k
qmtut 7: https://www.youtube.com/watch?v=P1-lN3nrtIw
qmtut 8: https://www.youtube.com/watch?v=MZCTM6Wjonc
qmtut 9: https://www.youtube.com/watch?v=8dvv-uJ1xYg
qmtut 10: https://www.youtube.com/watch?v=wHYMt02xXTo
qmtut 11: https://www.youtube.com/watch?v=oiUKAzjC9i0
qmtut 12: https://www.youtube.com/watch?v=ZyuiEf9FGlM
qmtut 13: https://www.youtube.com/watch?v=JyGvpOK6GfI
qmtut 14: https://www.youtube.com/watch?v=0Ulut5GuRKk
qmtut 15: https://www.youtube.com/watch?v=Nx2aL4iD7uA
qmtut 16: https://www.youtube.com/watch?v=Cmh9lrpIiFk
qmtut 17: https://www.youtube.com/watch?v=CNTbN2v06Sw
qmtut 18: https://www.youtube.com/watch?v=oxp9eKqj1W0
qmtut 19: https://www.youtube.com/watch?v=SgBEnfZfDHc
qmtut 20: https://www.youtube.com/watch?v=rS4WODNcNbs
qmtut 21: https://www.youtube.com/watch?v=ZAo9HLTC1RM
qmtut 22: https://www.youtube.com/watch?v=94Gvm3HtbPE
qmtut 23: https://www.youtube.com/watch?v=OZwj1dMo5TY
qmtut 24: https://www.youtube.com/watch?v=JDOlI9X9gVs
qmtut 25: https://www.youtube.com/watch?v=HM3WkEYG2Bo

The only changes where quick spelling/grammar corrections and added some other minor corrections/enhancements.
The topics and explanations are still exact the same as the previous ones.
The google drive QM folder is also updated.


This was a HUGE project and it might seem the style recording/presenting get's different throughout the tutorial because there where moments I just dropped this project.

Currently I am sick (flu hit me real hard) and there are a lot of personal issues going on so I might not reply immediately.
I just hope this all helped.

Good luck...
#2
Congrats for this astounding work, Ron. It's not only for beginners. There is a lot of useful info for long term users as well. This is a truly boost for learning.

Thanks for sharing. Regards.
#3
Just amazing for all your efforts to put in for this tutorial.

I've just watched the "Demo" video and I feel like it. Of course I have to press the "Pause" button to have enough time to read all the info highlighted in yellow but it's worth the effort.

Thanks a lot for this nice tutorial. It will help not just for beginners but for seasonal folks, too.
Keep up the good work!

Start_Learning
#4
Thank you for the kind words!
I have done quick proof-read of the text in the tutorials and it seems the first 12/13 chapters contain to much spelling/grammar errors.
After chapter 13 there also spelling errors but the first 12 contained to much of it.
I will remove the current videos and re-upload new versions where a lot of the spelling/grammar errors are corrected.

But note, the whole tutorial will still contain (a lot of) improper English (and errors), but it should be much more readable.

As a sidenote:
Youtube does not allow video's to be replaced, the only thing you can do is remove and upload new video's if needed.
Also, text annotations created within youtube only seem to work on desktop versions of browsers, mobile devices can not render those youtube
created text annotations. There is a thing called "youtube cards" which youtube want's you to use but they do not behave like the youtube annotations.
Just wanted to notify viewers of these limitations.

EDIT 1: The current tutorials are deleted. I will reupload text corrected tutorials in the coming days.
EDIT 2: The new links are up, see above.
#5
Quote:And all these tutorials require a lot of pausing as soon as the yellow text annotation appear.
The time they appear might not be long enough to read all the text.

Tip:
I use the Right and Left arrow keys. It moves 5 seconds forward or back. It works when playing and when paused. In playing mode you can return 5 seconds back when too fast or skip 5 seconds when too slow. In paused mode you cannot see the mouse movements etc but you can be more relaxed when reading longer text. You can use the space key to pause/play.

-----------

Tip 2:
I choose the video size with the smaller white rectangle button. It makes the video bigger bot not full screen. Then also depends on window size. In full screen more blurred.
#6
I have been in the Internet search QM related tutorial, unfortunately, are not found, and now, QM has finally produced the first set of tutorials, thank you, I will try to learn, and the software and tutorials, Introduced to my family, colleagues, friends! SmileThanks for sharing
#7
@r0n

Hello, r0n,  Your recorded tutorial is awesome. This is a very great job and will allow more people to learn to use QM. Smile


I found that you used the faststone capture software to record the tutorial. The file format downloaded from youtube is MP4. I can't directly use faststone capture to edit. (The notes in the image below) Can you provide the source file for recording? I would like to use faststone capture to translate the English notes into my own country's language, then upload the web and share it with more friends because my friend's English is not very good. Thanks in advance! Heart


Attached Files Image(s)
   
#8
@win

I used ActivePresenter for most of my recordings (I think almost all of them).
I understand the need for translation but I can not give the original source files away because I want to keep everything under my "channel".
I do not want to sound disrespectful for your effort into wanting translating the video tutorials, I really appreciate it.

However there might be another way.
ActivePresenter is able to generate an XML file with the text annotations, you could modify these XML files to translate it and I could render translated video tutorials using the modified XML files.

But:
1. I ran into an license issue regarding ActivePresenter which I want to resolve first
2. Then I need to test the translation process and create a short instruction
3. I need to find time to do all this

If I resolved the above 3 issues, I will post the link to the XML files here with instructions.
I can not promise when it will be done.... next week.... next month....next year...

Thanks!
#9
@r0n

Thank you very much and made great efforts to promote QM

If I can use xml file for translation, when I output the video, I will mark your copyright information in a prominent place. Smile
#10
Hello r0n, your tutorial is a great job. I learned a lot of programming knowledge from your tutorial, but my English level is not very good, and many English sentences don't understand much.

Now, I have an idea. I hope that you can provide the xml file of the comment in the video, which is convenient for interested people, translate it into the language of your own country, then submit it to you, and finally output it as a video, which will help people from all over the world. Learn about QM

I think QM is a very efficient computer assistant, the syntax is simple and clear, but unfortunately, my friends around me know too little about QM.

When my programming level reaches a certain stage, I will consider recording a video tutorial with voice and sharing it with friends who are interested in automation.
#11
@r0n

Hello, I am watching a video tutorial 18
I run the following code, the prompt is undefined, can you guide me, where can I find this custom function? Thanks in advance

I have encountered this problem in other tutorial code files. If export the related files to a .qml file, it will be more convenient to use.

code File : 13 (2).txt

Macro Macro2
Code:
Copy      Help
str dd=
;BEGIN DIALOG
;0 "" 0x90C80AC8 0x0 0 0 191 113 "Dialog"
;5 Static 0x54000000 0x0 62 26 110 11 ""
;4 Button 0x54032000 0x0 3 23 48 14 "HOTKEY 1"
;3 Static 0x54000000 0x0 19 50 142 10 "Shift + left click on button is clear hotkey!"
;2 Button 0x54030000 0x4 77 94 48 14 "Cancel"
;8 Button 0x54020007 0x0 57 16 120 26 ""
;END DIALOG
;DIALOG EDITOR: "" 0x2040308 "*" "" "" ""

if(!ShowDialog(dd &sub.DlgProc 0)) ret

#sub DlgProc
function# hDlg message wParam lParam
int- maindlg=hDlg
sel message
,case WM_INITDIALOG
,,int- t_hk
,,__RegisterHotKey hk
,,str hr    
,,str- hk1="119"
,,str purge="" ;;I often use this to empty inputfields (can be anything you want).
,,int vk_in mod_in mod
,,vk_in=val(hk1)&255 ;; vk
,,mod_in=val(hk1)>>8 ;;mod
,,mod=(mod_in~5)|(mod_in>>2&1)|(mod_in<<2&4)        
,,FormatKeyString vk_in mod_in &hr ;; human readable format!
,,if(!hk.Register(hDlg 0 mod vk_in)) ;; '0' => hotkey ID can be any number.
,,,mes(F"Could not register:[][]{hr}" "!")        
,,hr.setwintext(id(5 hDlg))

,case WM_HOTKEY
,,hk_MakeHr(val(hk1) hr)        
,,;; IF HOTKEY F8 IS PRESSED!
,,if(wParam=0) ;; 'wParam' corresponds to hotkey id
,,,out
,,,0.1
,,,out F"Key {hr} pressed"

,case WM_DESTROY
,case WM_COMMAND goto messages2
ret
;messages2
sel wParam
,case 4
,,;; ifk(S) checks if [SHIFT] was pressed, this means UNREGISTER (unmap) hotkey!
,,;; make sure that you place 'ifk' commands at the beginning of your code
,,;; this means beginning of macro,function,... OR beginning of a code section
,,;; in this example you see it being placed DIRECTLY AFTER 'case 4'
,,;; which means button id '4' pressed in dialog.
,,ifk(S)
,,,UnregisterHotKey(hDlg 0)
,,,hk1="0"
,,,purge.setwintext(id(5 hDlg))            
,,,goto skip
,,UnregisterHotKey(hDlg 0)        
,,hk_Sethotkey
,,if(t_hk>0) ;; We now use 't_hk' for registering key, val(t_hk) is NOT needed. 't_hk' is already integer!
,,,vk_in=t_hk&255 ;; vk
,,,mod_in=t_hk>>8 ;;mod
,,,mod=(mod_in~5)|(mod_in>>2&1)|(mod_in<<2&4)        
,,,FormatKeyString vk_in mod_in &hr        
,,,if(!hk.Register(hDlg 0 mod vk_in)) ;; '0', you MUST use the hotkey ID which you set under 'case WM_HOTKEY'
,,,,mes(F"Could not register:[][]{hr}" "!")
,,,hk_MakeHr(t_hk hr)
,,,hr.setwintext(id(5 hDlg))
,,,hk1=t_hk ;; We MUST put 't_hk' in STRING 'hk1' because above in "case WM_HOTKEY" we use 'hk1' to output which keyboard shortcut was pressed!
,,;skip

,case IDOK
,case IDCANCEL
ret 1


Attached Files Image(s)
   
#12
Thank you for pointing that out.

Create function "hk_MakeHr"

And put the below code in it

Function hk_MakeHr
Code:
Copy      Help
function int'hk str&hr

;Retrieves the human-readable format of an virtual keycode which is in integer format

;hk - hotkey in string format, example: "577"
;hr - the human readable format will be put in this variable

int k_vk
int k_mod
str human_readable

k_vk=hk&255
k_mod=hk>>8


FormatKeyString k_vk k_mod &human_readable
hr=human_readable
human_readable=""

ret 1
#13
Thanks for your reply, still prompted the following error

Also, the video 20 code file: 2 also prompts the following error

In addition, I found that many code files have lost custom functions. I hope to retest all the code files on a newly installed QM software. The code in the video tutorial is very valuable. Thank you again for your greatness. work


Attached Files Image(s)
       
#14
Create function "HkSetHotkey" and paste all the below code in it:

Function HK_SetHotkeyDlg
Code:
Copy      Help
\Dialog_Editor

;;********************************************************
;;*
;;* In the calling script declare 't_hk' thread global.
;;*
;;* Then you only have to check for the contents of 't_hk':
;;* if t_hk=0: user pressed cancel (line 93)
;;* if t_hk>0: user pressed hotkey
;;*
;;********************************************************

int- set_hk_up_down
str dd=
;BEGIN DIALOG
;0 "" 0x90C80AC8 0x8 0 0 219 65 "Set Hotkey"
;3 Edit 0x54030080 0x200 64 8 152 12 ""
;4 Static 0x54000200 0x0 7 9 54 11 "PRESS HOTKEY:"
;12 Static 0x54000200 0x0 110 25 71 7 "Hotkey numeric value:"
;13 Edit 0x54030880 0x200 185 23 30 11 ""
;14 Button 0x54032000 0x0 105 48 58 14 "Use hotkey"
;2 Button 0x54030000 0x4 168 48 48 14 "Cancel"
;END DIALOG
;DIALOG EDITOR: "" 0x2040308 "*" "" "" ""



str controls = "3 13"
str e3 e13
if(!ShowDialog(dd &sub.DlgProc &controls)) ret

#sub DlgProc
function# hDlg message wParam lParam

int- t_hhk t_hk
sel message
,case WM_INITDIALOG
,,str- regx_isnum="^[0-9]+$" ;; Checks if a string only contains NUMBERS
,,int k_vk
,,int k_mod
,,str k_vk_str
,,str k_mod_str
,,str t_hk_str
,,t_hhk=id(3 hDlg)
,case WM_DESTROY
,case WM_COMMAND goto messages2
ret
;messages2
sel wParam
,case 14 ;; button 'Use hotkey'
,,_s.getwintext(id(3 hDlg))
,,if(empty(_s))
,,,mes("Put cursor in 'PRESS HOTKEY:' inputfield then press hotkey" "No hotkey pressed" "i")
,,,ret 0
,,k_vk=t_hk&255
,,k_mod=t_hk>>8        
,,k_vk_str=k_vk
,,k_mod_str=k_mod
,,t_hk_str=t_hk
,,
,,t_hk_str.setwintext(id(13 hDlg))
,,str human_readble_qmout
,,FormatKeyString k_vk k_mod &human_readble_qmout
,,_s.getwintext(id(13 hDlg))
,,if(findrx(_s regx_isnum)<0)
,,,mes("hk_Sethotkey[]Could not properly detect pressed hotkey, please retry[]If problem persists please restart this application and retry." "Error" "!")
,,,ret 0
,,else
,,,sel mes(F"Do you want to use hotkey:[][]{human_readble_qmout}" "Remap hotkey?" "YN?")
,,,,case 'Y'
,,,,,;; Use "DT_Ok(hDlg)" if this is in a sub dialog, for example a dialog contains another dialog with a button save...
,,,,,;; In this way the subdialog get's closed correctly with (global) variables in tact!!!!
,,,,,DT_Ok(hDlg)
,,,,case 'N'
,,,,,ret -1
,case EN_SETFOCUS<<16|3    
,,int-- t_hh
,,t_hh=SetWindowsHookEx(WH_KEYBOARD &sub.Hook_WH_KEYBOARD _hinst GetCurrentThreadId)
,case EN_KILLFOCUS<<16|3
,,UnhookWindowsHookEx t_hh
,case IDOK

,;note: mod used with RegisterHotKey is different: need to swap the first and third bits.
,case IDCANCEL
,,t_hk=0
,,ret -1
ret 1


#sub Hook_WH_KEYBOARD
function# nCode vk lparam
if(nCode<0) goto gNext

int up(lparam&0x80000000) m mod

sel(vk) case VK_SHIFT m=1; case VK_CONTROL m=2; case VK_MENU m=4; case [VK_LWIN,VK_RWIN] m=8
int-- t_mod
if(m) vk=0; if(up) t_mod~m; else t_mod|m
else mod=t_mod

if(!up) sub.SetHotkey vk mod

ret 1

;gNext
ret CallNextHookEx(0 nCode vk +lparam)


#sub SetHotkey
function vk mod

int- t_hhk t_hk
FormatKeyString vk mod &_s
_s.setwintext(t_hhk)
t_hk=mod<<8|vk

Create function "TabGetName"

and paste below code in it

Function TabGetNameFromIndex
Code:
Copy      Help
;/
function! htb item str&s

TCITEMW TabText.mask=WINAPI.TCIF_TEXT
BSTR b.alloc(260)
TabText.pszText=b
TabText.cchTextMax=260
SendMessageW(htb TCM_GETITEMW item &TabText)
s.ansi(b)
ret s.len!=0

;; http://www.quickmacros.com/forum/showthread.php?tid=3863&highlight=TCM_GETITEM
#15
If possible, I suggestion to use QM to export all code files. In the first line of the code file, it is the link address of the youtube video tutorial, this will be more convenient to use and maintain, Idea please see the image below

The file name of the above function is wrong, please change HK_SetHotkeyDlg to hk_Sethotkey


Attached Files Image(s)
   
#16
If I find the time I will go through the source code and re-check them and find a better solution to keep them manageable. Thank you for the double check.
#17
This is an amazing project, thanks again Heart
#18
I used it for nearly 4 hours. I packed the youtube video tutorial and related code files, which makes it easier to learn QM.

It's also easy to watch on your phone. If possible, I recommend that the administrator put the file on the web server.

If you find an error, please leave a message below, I will always improve it.

Below is the package file and preview image link

https://ibb.co/tH1f5Hs
______________________________________________________________
2019.4.10

Temporarily cancel sharing because some code can't run, After all the modifications, upload again

In the future, if possible, I will record a video tutorial with subtitles in multiple languages,

but now the programming level is too bad, I am learning.
#19
I don't know and can't promise if/when I will upload this.
I am almost sure I will have a site up and running end of this year and will upload this.

For now what I could do is that I add a link to a document and folder from your end.
That document contains information about "QM Tutorial (Published).zip" and the google folder will contain the zip file. In this way you can keep it up to date and add/modify info as you please.

And in this way the main entry point to all the resources is the description section below each youtube video with a link to the main google drive folder: https://drive.google.com/drive/folders/0...VhBSmFId3M

I will add the link to your google folder with the "QM Tutorial (Published).zip" and google document in the all the 3 documents.

If you whish you can upload the zip contents to a webserver of your own choosing but please keep my name and email adress (I have sent a personal message through the qm forum about this) on the page web page and keep the links to the actual youtube url's as you see above in my first post.


Forum Jump:


Users browsing this thread: 2 Guest(s)