Ich spreche nicht von optischem Schnickschnack sondern von Basisdingen, wie Datenstruktur, Datensicherheit, Datenkonsistenz. Mit NTFS wurde schon ein riesiger Schritt getan, was man ja auch anerkennen muß. Aber mir ist auch klar, dass es wenig Sinn macht, einen Vergleich führen zu wollen. Warten wir die Zukunft ab, wie sich die Systeme weiterhin etablieren.
Beiträge von BugFix
-
-
Klar geht das, macht aber wenig Sinn, weil du dann ALLE Funktionen einbindest und vllt. nur 20 brauchst.
Das erzeugt einen gewaltigen Overhead und deine Skripte werden statt 200 KB stolze 2MB oder mehr groß. 
-
Mein Kommentar:
Wenn Windows gut werden soll, sollte versucht werden, dass damit wenigstens ansatzweise das möglich wird, was Linux perse kann.
-
Du hast ja einmal einen INI-Eintrag allein für Slider und einmal fügst du den Slider Wert bei 'Command' an.
Ich hab es jetzt mal so geändert, dass bei nicht markierter CB4 weder der Eintrag bei Slider noch bei Command erfolgt. Ist nur eine If-Abfrage, kannst du selber auch anpassen:Spoiler anzeigen
[autoit]Func Speichern ()
[/autoit]
Local $read
$string = ''
$read = BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED)
IniWrite($INI, "Box", "1", $read)
If $read Then $string &= "/a on" & ';'
$read = BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED)
IniWrite($INI, "Box", "2", $read)
If $read Then $string &= "/b on" & ';'
$read = BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED)
IniWrite($INI, "Box", "3", $read)
If $read Then $string &= "/c on" & ';'
$read = BitAND(GUICtrlRead($Checkbox4), $GUI_CHECKED)
IniWrite($INI, "Box", "4", $read)
If $read Then
$string &= "/d on" & ' '
$read = GUICtrlRead($Slider1)
IniWrite($INI, "Slider", "1", $read)
$string &= $read
EndIf
If StringRight($string, 1) = ';' Then $string = StringTrimRight($string, 1) & ' '
IniWrite ($INI, "User", "Command", $string)
$read = GUICtrlRead($Combo1)
IniWrite($INI, "Combo", "1", $read)
EndFunc -
Hi,
ich habe es mal kpl. überarbeitet und den Code dadurch reduziert. Du hattest ja die Checkboxen doppelt ausgelesen und für jeden Wert eine Variable ausgegeben, das ist aber nicht nötig. Schau es dir mal an:Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $1 , $2 = 1, $3 =50, $4 = 4, $5 = 50,$6 =1, $7 = 50, $string
[/autoit] [autoit][/autoit] [autoit]
Global $INI = "c:\temp\Setup.ini"$Form1 = GUICreate("Dies ist ein Beispiel", 281, 447, 193, 125)
[/autoit] [autoit][/autoit] [autoit]
$Label1 = GUICtrlCreateLabel("Dies ist ein Beispiel", 80, 32, 141, 25)
GUICtrlSetFont(-1, 12, 400, 0, "Century Gothic")
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 13, 13)
$Label2 = GUICtrlCreateLabel("Test /a on", 128, 64, 54, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 96, 96, 13, 13)
$Label3 = GUICtrlCreateLabel("Test /b on", 128, 96, 54, 17)
$Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 96, 128, 13, 13)
$Label4 = GUICtrlCreateLabel("Test /c on", 128, 128, 54, 17)
$Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 96, 160, 13, 13)
$Label5 = GUICtrlCreateLabel("Test /d on", 128, 160, 54, 17)
$Slider1 = GUICtrlCreateSlider(120, 184, 70, 37)
$Combo1 = GUICtrlCreateCombo("Deaktiviert", 80, 232, 145, 25)
GUICtrlSetData(-1, "Test e|Test f|Test g")
$Button1 = GUICtrlCreateButton("Speichern", 104, 280, 75, 25, 0)
GUICtrlSetOnEvent ($Button1 , "Speichern")
GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Speichern ()
[/autoit] [autoit][/autoit] [autoit]
Local $read
$string = ''
$read = BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED)
IniWrite($INI, "Box", "1", $read)
If $read Then $string &= "/a on" & ';'
$read = BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED)
IniWrite($INI, "Box", "2", $read)
If $read Then $string &= "/b on" & ';'
$read = BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED)
IniWrite($INI, "Box", "3", $read)
If $read Then $string &= "/c on" & ';'
$read = BitAND(GUICtrlRead($Checkbox4), $GUI_CHECKED)
IniWrite($INI, "Box", "4", $read)
If $read Then $string &= "/d on" & ' '
If StringRight($string, 1) = ';' Then $string = StringTrimRight($string, 1) & ' '
$read = GUICtrlRead($Slider1)
IniWrite($INI, "Slider", "1", $read)
$string &= $read
IniWrite ($INI, "User", "Command", $string)
$read = GUICtrlRead($Combo1)
IniWrite($INI, "Combo", "1", $read)
EndFuncFunc _ende ()
[/autoit]
Exit
EndFunc -
Na dann überspring doch die leeren Zellen:
[autoit]For $i = 1 to UBound($alle) - 1
[/autoit]
If $alle[$i] = '' Then ContinueLoop
$string = $string & $alle[$i] & ';'
Next
$string = StringTrimRight($string, 1) -
Ich muß funkey zustimmen - ein Wettbewerb muß schon eine Herausforderung sein. Und das Umsetzen von Spielshows beinhaltet im Allgemeinen mehr Optik als Logik und ist somit wenig reizvoll (zumindest für mich).
Also Alina, nicht traurig sein - aber das Thema war halt nicht der Brüller. Oder wie sagen die Briten so stilvoll: Shit happens!
-
Hi,
[autoit]
einfach in der Schleife, in der du das Array abarbeitest, das ';' anhängen und nach dem letzten Eintrag ein Zeichen abschneiden, da ja nun kein weiteres Element folgt:For $i = 1 to UBound($alle) - 1
[/autoit]
$string = $string & $alle[$i] & ';'
Next
$string = StringTrimRight($string, 1) -
Richtig - FileOpen war das Problem.
Hier mal als komprimierte Variante:Spoiler anzeigen
[autoit]#include<GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Zahlenblock", 131, 171, 442, 396)
GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
$Button1 = GUICtrlCreateButton("1", 8, 8, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button2 = GUICtrlCreateButton("2", 48, 8, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button3 = GUICtrlCreateButton("3", 88, 8, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button4 = GUICtrlCreateButton("4", 8, 48, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button5 = GUICtrlCreateButton("5", 48, 48, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button6 = GUICtrlCreateButton("6", 88, 48, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button7 = GUICtrlCreateButton("7", 8, 88, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button8 = GUICtrlCreateButton("8", 48, 88, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button9 = GUICtrlCreateButton("9", 88, 88, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button10 = GUICtrlCreateButton("0", 48, 128, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_buttonClick')
$Button11 = GUICtrlCreateButton("C", 8, 128, 33, 33, 0)
GUICtrlSetOnEvent(-1, '_dateileeren')
$Button12 = GUICtrlCreateButton("OK", 88, 128, 33, 33, 0)
GUISetState(@SW_SHOW);~ _dateiloeschen()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _ende()
[/autoit] [autoit][/autoit] [autoit]
_dateiloeschen()
Exit
EndFuncFunc _buttonClick()
[/autoit] [autoit][/autoit] [autoit]
Local $button = @GUI_CtrlId
Local $fh = FileOpen("test.txt", 1)
FileWrite($fh, ControlGetText($Form1, '', $button))
FileClose($fh)
MsgBox(0, "Test", FileRead("test.txt"))
EndFunc; löscht die Textdatei
[/autoit] [autoit][/autoit] [autoit]
Func _dateiloeschen()
If FileExists("test.txt") Then
If FileDelete("test.txt") Then MsgBox(0, 'Löschen', 'Datei gelöscht!')
EndIf
EndFuncFunc _dateileeren()
[/autoit]
Local $fh = FileOpen("test.txt", 2)
FileWrite($fh, "")
FileClose($fh)
EndFunc -
Also wenn du aus einem Pool an Fragen zufällig welche auswählen möchtest, ohne Wiederholungen, dann gibt es eine viel einfachere Methode: Du hast Fragen und Antworten in einem Array ([$i][0]=Frage, [$i][1]=Antwort). Du erstellst ein zweites Array, das nur die Indexzahlen des Frage/Antwort-Arrays enthält, den gezogenen Wert löscht du dann einfach aus dem Array.
Hier mal ein Bsp.:Edit: Hab das Bsp. nochmal verändert, mit Frage-Antwort. Läuft solange, bis alle Fragen richtig beantwortet sind oder 'ENDE' als Antwort gegeben wird.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $aFragen[10][2] = [ _
['Frage1','Antwort1'], _
['Frage2','Antwort2'], _
['Frage3','Antwort3'], _
['Frage4','Antwort4'], _
['Frage5','Antwort5'], _
['Frage6','Antwort6'], _
['Frage7','Antwort7'], _
['Frage8','Antwort8'], _
['Frage9','Antwort9'], _
['Frage10','Antwort10']]Global $aIndex[10] = [0,1,2,3,4,5,6,7,8,9]
[/autoit] [autoit][/autoit] [autoit]While IsArray($aIndex)
[/autoit] [autoit][/autoit] [autoit]
Local $index = _GetRandom()
Local $in = InputBox('Frage [Beenden mit: ENDE]', $aFragen[$aIndex[$index]][0])
If $in = 'ENDE' Then ExitLoop
If $in = $aFragen[$aIndex[$index]][1] Then
If UBound($aIndex) = 1 Then
MsgBox(0, 'Richtig', 'ENDE - Das wars')
Else
MsgBox(0, 'Richtig', 'Und weiter gehts')
EndIf
_ArrayDelete($aIndex, $index)
Else
MsgBox(0, 'Falsch', 'Und weiter gehts')
EndIf
WEndFunc _GetRandom()
[/autoit]
Return Random(0,UBound($aIndex)-1,1)
EndFunc -
Was für eine Ressource hast du denn eingebunden? Falls es ein Bitmap ist, dafür hatte ich schonmal ein Bsp. erstellt:
Load Bitmap from DLL
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Constants.au3>
#include <GUIConstantsEx.au3>Global $ressource = "shell32.dll"
[/autoit] [autoit][/autoit] [autoit]
Global $resID = 131
Global $hGUI, $hInstance, $hBMP$hGUI = GUICreate('Test Bitmap from DLL', 500, 200)
[/autoit] [autoit][/autoit] [autoit]
$hInstance = _WinAPI_LoadLibraryEx($ressource, $LOAD_LIBRARY_AS_DATAFILE)
$hBMP = _WinAPI_LoadBitmap($hInstance, $resID)
GUISetState()_ShowRessourceBMP($hGUI, $hBMP, 20, 20)
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_DeleteObject($hBMP)
_WinAPI_FreeLibrary($hInstance)Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc _ShowRessourceBMP($hGUI, $hBMP, $X, $Y)
[/autoit]
_GDIPlus_Startup ()
Local $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, $X, $Y)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hBitmap)
_GDIPlus_ShutDown()
EndFunc -
Hab mal kurz gegoogelt, um etwas über MapInfo zu erfahren. Wenn ich die Infos richtig verstanden habe, existiert in dem Programm eine Datenbank. Und ich habe auch zahlreiche Werbung einer Softwarefirma für ein Basicprogramm gefunden, dass zur Konzeption von Erweiterungen gedacht ist. Somit vermute ich mal, dass der Zugriff über COM nicht allzu schwierig sein sollte.
Von Interesse wäre da natürlich die DB plus zugehörigem Treiber. Dann könnte man mal probieren, z.B. per Datenbankobjekt die gewünschten Daten abzufragen.
Wobei das natürlich jetzt alles etwas frei interpretiert ist, da ich das Programm und seine Wirkungsweise überhaupt nicht kenne. -
Sortierung mache ich i.A. per Spaltenklick:
Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <WindowsConstants.au3>$gui = GUICreate('Test LV-Sort')
[/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView('Spalte 1|Spalte 2', 10, 10, 300, 200)
For $i = 1 To 15
GUICtrlCreateListViewItem(Chr(Random(65,90)) & '|' & Chr(Random(65,90)), $hListView)
Next
GUISetState()Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Ich denke mal, du solltest deinem Button den Style $BS_ICON verpassen.
-
Diese Anwendung ist sowieso ein typischer Fall für eine fußgesteuerte Schleife. Denn es soll ja mindestens einmal durchlaufen werden:
[autoit]Do
[/autoit]
Until PixelGetColor($x,$y) = "0xFF0000" -
Versuche mal dich sauber zu artikulieren - ich versteh kein Wort

-
der leert den puffer? wofür das?
Eigentlich nur beim ersten Aufruf (evtl.) nötig. Habe es sicherheitshalber reingesetzt, sonst kann es mal passieren, dass der Pufferinhalt den Key ausgibt, ohne dass es gewollt ist. Ist zwar etwas hypothetisch, aber sicher ist sicher. -
Du mußt die Items direkt hintereinander festlegen!!!
-
aber er zeigt mir den 2ten Tab trotzdem net an? Öö>
[autoit]
Nimm mein Bsp. das zeigt beide TabItems an. Übrigens brauchst du zwingend eine Variable für den Tab. Sonst hast du keine Möglichkeit abzufragen, welches Item aktiv ist.If $msg = $Tab Then $Item = _GUICtrlTab_GetCurSel ($Tab)
[/autoit] -
Du mußt den Tab immer 'schließen' beim Erstellen. Sonst ist nicht sichtbar, welche Ctrl dazu gehören.
[autoit]GUICreate('Settings', 230, 130)
[/autoit]
GUICtrlCreateTab(10, 10, 200, 100)
GUICtrlCreateTabItem("English")
$Checkbox1 = GUICtrlCreateCheckbox("AutoUpdate", 20, 40)
$Checkbox2 = GUICtrlCreateCheckbox("AutoLogin", 20, 60)
$Checkbox3 = GUICtrlCreateCheckbox("Newsletter", 20, 80)
GUICtrlCreateTabItem('') ; Close tabitem.
GUICtrlCreateTabItem("Deutsch")
GUICtrlCreateTabItem('') ; Close tabitem.
Raupi war schneller...