Page 2 of 2

Re: ZackZackOrdner

Posted: 01 May 2016, 18:05
by Gerdi
Mit der Version 0.217 ist eine Funktion

Code: Select all

AbfrageFenster()
mitgekommen, die auch für andere Skripte interessant sein könnte.
Für Leute denen MsgBox zu wenig Freiheiten lässt, die aber nicht immer gleich ein eigenes Gui-Fenster coden möchten. Sie unterstützt:
- bis zu 9 flexibel beschriftbare (rudimentär positionierbare) Buttons
- ein Text-Feld welches zur Anzeige und oder zur Rückgabe verwendet werden kannn
- ein Haupt-Fenster
Ohne dass für den Funktionsaufruf Gui's verinnerlicht werden müssen.
Im Quelltext finden sich AufrufBeispiele.

Code: Select all

AbfrageFenster(FuncEinstellungen="",FensterTitel="",Frage="",ButtonText1="",ButtonText2="",ButtonText3="",ButtonText4="",ButtonText5="",ButtonText6="",ButtonText7="",ButtonText8="",ButtonText9="")
{
; FuncEinstellungen ist ein Objekt
; FuncEinstellungen: 	AbfrageFensterOnTop	DisableMainWindow	EditBeiErstEinfuegenLeeren	EditHatFokus	EditReadOnly	MarkiereEdit  <--- true or false
; FuncEinstellungen: 	DefaultButton	  <--- # or OK 	# ist die Nummer des Buttons
; AufrufBeispiele:
/*
AbfrageFenster()	; warten auf weiter
AbfrageFenster(,"Clipboard Anzeige",Clipboard)		; Anzeige der Zwischen-Ablage
FuncEinstellungen := {DefaultButton: 1}
Antwort:=AbfrageFenster(FuncEinstellungen,"Clipboard 2 Text",Clipboard,"Clipboard Inhalt in Text wandeln","Clipboard wie editiert uebernehmen","Abbruch")		; bearbeiten der Zwischen-Ablage
if(SubStr(Antwort,1,1)=1)
	Clipboard:=Clipboard
else if(SubStr(Antwort,1,1)=2)
	Clipboard:=SubStr(Antwort,2)
FuncEinstellungen := {DefaultButton: 7, EditReadOnly: 1}
AntwortButtonNummer:=SubStr(AbfrageFenster(FuncEinstellungen,"AnfangsBuchstabe","mit welchem Buchstabe soll begonnen werden?","a","b","c","d","e",">>>>mit einer Zahl",">>>>>>>>>>>>>>>>Abbruch"),1,1)
MsgBox % "Sie haben mit dem " AntwortButtonNummer ". Button geantwortet"
FuncEinstellungen := {DefaultButton: 2,EditBeiErstEinfuegenLeeren:1,EditHatFokus:1}
Antwort:=AbfrageFenster(FuncEinstellungen,"Notiz","Bitte schreiben Sie in dieses Feld Ihre Notiz in Prosa`n`n`n`nHinweis: das erste Zeichen wird versschluckt.",">>>habe keine Notiz",">>>>>>Notiz Hinterlassen")
if(SubStr(Antwort,1,1)=2)
	MsgBox % SubStr(Antwort,2)
FuncEinstellungen := {DefaultButton: 2,EditHatFokus:1,MarkiereEdit:1}
Antwort:=AbfrageFenster(FuncEinstellungen,"Notiz","Bitte schreiben Sie in dieses Feld Ihre Notiz in Prosa`n`n`n`n",">>>habe keine Notiz",">>>>>>Notiz Hinterlassen")
if(SubStr(Antwort,1,1)=2)
	MsgBox % SubStr(Antwort,2)
ExitApp
*/
static 					; alle
AbfrageFensterErg:=0

; DefaultEinstellungen
DisableMainWindow:=false
AbfrageFensterOnTop:=true
EditReadOnly:=false
EditBeiErstEinfuegenLeeren:=false
DefaultButton:="OK"
EditHatFokus:=false
MarkiereEdit:=false

FirstEdit:=true
if(IsObject(FuncEinstellungen))
{
For FuncVarName, FuncVarInhalt in FuncEinstellungen
    %FuncVarName% := FuncVarInhalt
}
if(FensterTitel="")
	FensterTitel:=A_ScriptName
if(Frage="")
	Frage:="weiter?"
Frage4711:=Frage

if(ButtonText1="")
	ButtonText1:="OK"

ReadOnly=
If EditReadOnly
	ReadOnly=ReadOnly
	
StringSplit, Frage4711Array, Frage4711, `n, `r
if LeerZeilenAmEndeWeglassen
{
	Loop
	{
		IF(SubStr(Frage4711, 0,1)="`n")
			StringTrimRight, Frage4711, Frage4711, 1
		Else
			Break
	}
}
Default=
Loop, 10
	{
	If(ButtonText%A_Index%<>"")
		{
		ButtonText4711%A_Index%:=ButtonText%A_Index%
		NeachRechts%A_Index%:=1
		Index:=A_Index
		Loop
		{
			IF(SubStr(ButtonText4711%Index%, 1,1)=">")
			{
				++NeachRechts%Index%
				StringTrimLeft, ButtonText4711%Index%, ButtonText4711%Index%, 1
			}
			Else
				Break
		}
			If (DefaultButton="OK")
			{
				IF(ButtonText4711%A_Index%="OK")
					Default=Default
				Else
					Default=
			}
			else if DefaultButton is Integer
			{
				if (A_Index=DefaultButton)
					Button%A_Index%Default:=true
				else
					Button%A_Index%Default:=false
			}
		}
	Else
	{
		ButtonText47110:=A_Index - 1
		Break
	}
	}
; Gui, 4:+owner1  ; Make the main window (Gui #1) the owner of the "about box" (Gui #2).
Gui,4:New,+HwndGui4WinHwnd
if DisableMainWindow
	Gui +Disabled  ; Disable main window.
if AbfrageFensterOnTop
	Gui,4:+Resize  AlwaysOnTop
else
	Gui, 4:+Resize  ; Make the window resizable.
loop % ButtonText47110
{
	ThisButtonText:=ButtonText4711%A_Index%
	ThisNeachRechts:=NeachRechts%A_Index%*4
	if DefaultButton is Integer
	{
		if Button%A_Index%Default
			Default=Default
		else
			Default=
	}
	If(A_Index=1 And NeachRechts%A_Index%>1)
		Gui, 4:Add, Button, x%ThisNeachRechts%  gG4Button%A_Index% %Default%, %ThisButtonText%	
	Else If(A_Index=1)
		Gui, 4:Add, Button,   gG4Button%A_Index% %Default%, %ThisButtonText%
	Else
		Gui, 4:Add, Button, x+%ThisNeachRechts%  gG4Button%A_Index% %Default%, %ThisButtonText%
		
}
If(Frage4711<>"")
	{
	MaxBreite:=40
	Loop, parse, Frage4711, `n, `r  ; Specifying `n prior to `r allows both Windows and Unix files to be parsed.
		{
		ThisBreite:=strlen(A_LoopField)
		If(MaxBreite<ThisBreite)
			MaxBreite:=ThisBreite
	}
		EditBreite:=MaxBreite*10
		If(A_ScreenWidth<EditBreite)
			EditBreite:=A_ScreenWidth
	Gui, 4:Add, Edit, HwndHwndG4Edit1 vFrage4711 gFrage4711 %ReadOnly% X1 W%EditBreite%  R%Frage4711Array0%
	}
Gui, 4:Show,, %FensterTitel%
if EditHatFokus
	ControlFocus,,ahk_id %HwndG4Edit1%										; Edit fokusieren
If(Frage4711<>"")
	GuiControl,4:, Frage4711, %Frage4711%  ; Put the text into the control.
if MarkiereEdit
{
	ControlFocus,,ahk_id %HwndG4Edit1%										; Edit fokusieren
	Controlsend,Edit1,{Ctrl Down}a{Ctrl Up},ahk_id %Gui4WinHwnd%		; Edit markieren
}

Goto NachRet

4GuiSize:
if ErrorLevel = 1  ; The window has been minimized.  No action needed.
    return
; Otherwise, the window has been resized or maximized. Resize the Edit control to match.
NewWidth := A_GuiWidth - 2
ControlGetPos , Edit1X, Edit1Y, Edit1Width, Edit1Height, Edit1, %FensterTitel%
SysGet, TitleBarHeight, 31, SM_CYSIZE
; msgbox % TitleBarHeight
NewHeight := A_GuiHeight - Edit1Y + TitleBarHeight +4
; TrayTip,FensterGröße, % NewWidth "	" NewHeight,5
GuiControl, Move, Edit1, W%NewWidth%  H%NewHeight%
; GuiControl, Focus, Edit1  
return

Frage4711:
if (FirstEdit and EditBeiErstEinfuegenLeeren)
{
	ControlGetFocus, FocusedGuiConntrol,A
	if (FocusedGuiConntrol="Edit1")
	{
		Frage4711:=
		GuiControl,,%HwndG4Edit1%,
		FirstEdit:=false
	}
}
return

G4Button9:
++AbfrageFensterErg
G4Button8:
++AbfrageFensterErg
G4Button7:
++AbfrageFensterErg
G4Button6:
++AbfrageFensterErg
G4Button5:
++AbfrageFensterErg
G4Button4:
++AbfrageFensterErg
G4Button3:
++AbfrageFensterErg
G4Button2:
++AbfrageFensterErg
G4Button1:
++AbfrageFensterErg
Gui, Submit
AbfrageFensterErg=%AbfrageFensterErg%%Frage4711%
4GuiClose:  ; User closed the window.
Gui, Destroy
Gui -Disabled  ; Enable main window.
return AbfrageFensterErg
NachRet:
; WinWaitClose, %FensterTitel%
WinWaitClose, ahk_id %Gui4WinHwnd%
Gui -Disabled  ; Enable main window.
return AbfrageFensterErg

}

Re: ZackZackOrdner

Posted: 31 Mar 2017, 07:50
by Gerdi
Version 0.374

Inzwischen kann man mit ZackZackOrdner auch nach Dateien Suchen.
Beim Einlesen der StartPfad-Caches muss dazu jeweils mit ESC die FileSelectFolder-Box verlassen werden und dann ++ dem StartPfad vorangestellt werden.

Auch den Nutzen des Quelltext-Modus anzusehen (der Programmier-technisch eher trivial ist), könnte sich für Besitzer längerer Quelltexte lohnen.
Der Quelltext-Modus macht nicht viel mehr als Quelltexte Zeilenweise zu Filtern mit Sprung-Möglichkeit zu selben Quelltext-Stelle in einem Fremdeditor. Durch dieses Filtern, können unter anderem folgende Fragestellungen erleichtert, unterstützt oder sogar beantwortet werden:
  • Wo wird überall die Variable mit dem Name ... verwendet
    Wo wird überall das Label ... aufgerufen
    Wo wird überall die Funktion ... aufgerufen?
    Ist Variable ... verwaist?
    HotKey/HotString- Liste (Filter ::)
    Ist der (Var- / Func- / Label-) Name noch frei?
    Kommentare und auch sonstige Schreibweisen vereinheitlichen
    Wie war doch noch der exakte Name von? und das ohne die Editor-Stelle zu verlassen an der gerade gearbeitet wird.
    Inhaltsverzeichnis erstellen (im ZZO-Quelltext durch den Filter ##############################)
    Gui-Befehle bzw Menu-Befehle übersichtlicher vergleichen (z.B. durch den Filter Add oder Menu)
    ToDo Liste an Ort und Stelle im Kontext erstellen. (z.B. durch den Filter ToDo)
    Quelltext aufräumen (PS. Mir ist bekannt, dass der ZZO-Quelltext kein gutes Beispiel dafür ist.)
Plus sicherlich viele Erleichterungen mehr.

Näheres im Hilfe-Ordner siehe Quelltexte.htm

Re: ZackZackOrdner

Posted: 05 May 2017, 15:21
by Gerdi
just me wrote: Ich werde mir das bestimmt näher ansehen. Bisher habe ich den Versuch allerdings allein wegen der Länge des Hauptskripts abgebrochen. ;)
Hallo just me,

der Quelltext wurde zwar noch länger, aber ich habe versucht ihn lesbarer (durch: strukturieren, konsequent mit Einklappstellen versehen, Kommentare ergänzen) zu machen. Näheres ist im Quelltext selbst unter
Tipps zum Quelltext
beschrieben. Auch die Quell-Text-Tools die ZackZackOrdner mitbringt (Menu | ? | die Einträge in der unteren Hälfte) sollten beim ansehen unterstützen.

Die Hilfe-Dateien und die Versions-Informationen ( beide dito im ?-Menu) liefern einen Überblick und viele Details.

PS. zur einfachen Installation kann AktualisiereZackZackOrdner.ahk gestartet werden.