Wo ist das Problem?
- Zeilenwert =1
- While-Schleife
- Zelle "A" & Zeilenwert lesen
- wenn Inhalt = "" dann Schleife abbrechen
- sonst Inhalt verarbeiten
- Zeilenwert +1
Beiträge von BugFix
-
-
Hi,
grundsätzlich braucht man den Pfad ja nicht, da Shellexecute sich diesen selbst sucht. Spätestens aber, wenn ich an die Funktion Parameter übergeben möchte, ist der Pfad erforderlich.
Ich habe jetzt mal die Abfrage dafür erstellt. Es wird der allgemeingültige Standard-Browser abgefragt. Ist jedoch ein Eintrag unter dem angemeldeten User, so wird dieser vorrangig zurückgegeben.Edit: Habe die Stringzerlegung umgestellt, gab auf anderen Systemen da Probleme.
_GetDefaultBrowser
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-10-15 21:51:11 v 0.2
#EndRegion - TimeStamp;===============================================================================
[/autoit]
; Function Name....: _GetDefaultBrowser
; Description......: Ermittelt den Programmpfad des Default-Browsers
; Es wird der vom User festgelegte Default-Browser abgefragt, ersatzweise der allgemeingültige
; Parameter(s).....: keine
; Requirement(s)...: keine
; Return Value(s)..: Kompletter Programmpfad des Default-Browsers
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GetDefaultBrowser()
Local $sPath = RegRead("HKEY_CLASSES_ROOT\http\shell\open\command", '')
Local $progID = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice", "Progid")
If $progID <> '' Then ; == User-Default-Browser gesetzt
$sPath = RegRead("HKEY_CLASSES_ROOT\" & $progID & "\shell\open\command", "")
EndIf
$sPath = StringTrimLeft($sPath, 1)
Local $Pos = StringInStr($sPath, '"')
Return StringLeft($sPath, $Pos-1)
EndFunc ; ==>_GetDefaultBrowser -
-
Solltest du also ein Programm mit Vielen Buttons und anderen Kontrollelementen haben ist GUIGetMsg erste Wahl, da man dann nicht für jeden Button etc. eine Eigene Funktion benötigt.
Sorry, aber das ist Quatsch. Du brauchst allen Controls nur eine einzige Funktion zuweisen und kannst in dieser mit dem Makro @GUI_CtrlId das zuletzt geklickte Control auswerten.
Es ist Geschmackssache, welchen Modus man verwendet. Gerade bei vielen Controls bietet sich der OnEventMode an, da sich das Skript damit meist übersichtlicher gestalten läßt. - Aber wie gesagt: Jeder hat da seine eigenen Erfahrungen und Vorlieben. -
u. ja du kannst beides nutzen!
Jein. Zeitgleich geht es nicht! Du kannst entweder mit OnEventMode oder mit GUIGetMsg arbeiten. Niemals mit beiden zusammen. Es ist aber möglich innerhalb des Skriptes die Opt umzuschalten, im anderen Modus zu arbeiten und anschließend zum vorhergehenden Modus zurückzukehren. Schau dir in der "Array.au3" mal die Funktion "_ArrayDisplay" an - da passiert genau dieses. -
-
ps: woher bekommst du denn die Binär Code's für die Icon'S ?
Dazu habe ich mals das hier geschrieben.
-
Ähhm...
[autoit]_GUICtrlListView_DefaultsSet($iBkCol=0xFF0000, $iCol=0x000000, $iSize=14, $iWeight=400, $sFont='Arial')
[/autoit]Wenn du die Defaults setzen willst, dann haben die Variablennamen nix im Aufruf verloren.
[autoit]
Die in der Funktion vorbelegten Defaults setzt du einfach mit:_GUICtrlListView_DefaultsSet()
[/autoit], möchtest du eigene Werte setzen dann mit:
[autoit]_GUICtrlListView_DefaultsSet(0xFF0000, 0x000000, 14, 400, 'Arial')
[/autoit]
Und dieser falsche Aufruf führt mit Sichrheit zu einem Fehler.
Nutzt du nicht STRG+F5 um die Syntax zu checken?
- Da hättest du bereits den Verweis auf diesen Fehler bekommen. -
Kannst das ja hiermit verknüpfen: IntelliSenseBox
-
-
search1 und search2 haben den Wert -1 wenn ich über das Zusatzskript starte.
Wenn ich das Hauptskript alleine starte finden sie die erste Datei.
Das läßt vermuten, dass die Pfade nicht passen. Hast du diese eventuell relativ adressiert, oder verwendest du ein Pfadmakro (z.B. SkriptDir)? Wenn du in einer festen Umgebung arbeitest ist die Verwendung hardcodierter Pfade sinnvoller als eine relative Adressierung.
Check doch mal deine Pfade auf Existenz (FileExists) und laß dir Fehler per MsgBox ausgeben, damit du die Ursache einkreisen kannst. -
Wenn du eine bestimmte Zelle lokalisiert hast (z.B. mit einer Suche) und möchtest auf Nachbarzellen zugreifen empfehle ich die Funktion "Offset":
[autoit]$Wert = $oExcel.Range("A1").Offset($ZEILEN, $SPALTEN).Value
[/autoit]Wobei für $ZEILEN und $SPALTEN gilt:
0 - ist jeweils die Zeile/Spalte selbst, mit positiven Zahlen verweist man auf 'Spalte rechts/Zeile drunter' und mit negativen Zahlen auf 'Spalte links/Zeile drüber'. -
Auch von mir Alles Gute!
Und Achtung - ab jetzt gilt Erwachsenen-Strafrecht.
-
Du hast eine Hauptschleife, mit der du die Msg erhältst (GUIGetMsg).
Bei Druck auf den Button eröffnest du eine Endlosschleife, die erst verlassen wird, wenn der Button erneut gedrückt wird -- ABER diese Msg wirst du nie erhalten, da du die Msg-Schleife ja nicht mehr durchläufst, sondern in der inneren "Button"-Schleife hängst.
Skript falsch aufgebaut. - Die Abfrage gehört mit in die Hauptschleife. -
Spannend auch, daß einige Postleitzahlen (z.B. 21039) in mehreren Bundesländern präsent sind
Da scheint man sich nicht entscheiden zu können. Grundsätzlich ist es: Stadt Hamburg - also auch Bundesland Hamburg.
Aber... im Zuge von Eingemeindungen kamen im Laufe der Zeit hinzu:
Börnsen
Hamburg Curslack
Escheburg
Hamburg Bergedorf
Hamburg Neuengamme
Hamburg Altengamme
Und schon haben wir einen Mischmasch aus Hamburg/Schleswig-Holstein. :wacko: -
Ja, der Thread ist nur rudimentär brauchbar. Ich habe daraus mal eine sinnvolle UDF erstellt, findest du hier: https://autoit.de/index.php?page…1752#post231752
-
Da es ja heutzutage nur noch "Apps" gibt
und meine Damen im Büro dauernd die Zuordnung PLZ zu Bundesland benötigen, habe ich mal kurz diese "App" erstellt.
Eingabe PLZ und das zugehörige Bundesland wird ausgespuckt.
Vielleicht hat ja noch jemand Verwendung dafür. Nicht vergessen die "PLZ_BuLa.db" in das Skriptverzeichnis zu packen (als *.zip im Anhang).Spoiler anzeigen
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-10-08 22:24:40 v 1.0
#EndRegion - TimeStamp#include <EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
Local $aResult, $iRows, $iColumns
Local $sDB = @ScriptDir & '\PLZ_BuLa.db'
If Not FileExists($sDB) Then Exit MsgBox(0, 'Fehler', 'Datei: "PLZ_BuLa.db" befindet sich nicht im Skriptordner.')$GUI = GUICreate("PLZ - Zuordnung Bundesland", 360, 111, 192, 124)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0x4876FF)
GUISetOnEvent(-3, '_exit')
GUICtrlCreateLabel("PLZ", 80, 59, 33, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUICtrlCreateLabel("Bundesland", 24, 19, 89, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$inBuLand = GUICtrlCreateInput("", 128, 15, 200, 28, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_READONLY))
GUICtrlSetBkColor(-1, 0xFFEC8B)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$inPLZ = GUICtrlCreateInput("", 128, 54, 60, 28, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_NUMBER))
GUICtrlSetBkColor(-1, 0xF0FFF0)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")ToolTip('')
[/autoit] [autoit][/autoit] [autoit]
GUISetState()GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]_SQLite_Startup ()
[/autoit] [autoit][/autoit] [autoit]
_SQLite_Open($sDB)While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
_SQLite_Shutdown()
Exit
EndFuncFunc WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local Static $fShow = 0
Local $iIDFrom, $iCode, $hWndEdit, $sRead, $index
$hWndEdit = GUICtrlGetHandle($inPLZ)
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $ilParam
Case $hWndEdit
Switch $iCode
Case $EN_CHANGE
$sRead = GUICtrlRead($iIDFrom)
If StringLen($sRead) < 5 Then
If $fShow Then
GUICtrlSetData($inBuLand, '')
$fShow = 0
EndIf
Return $GUI_RUNDEFMSG
ElseIf StringLen($sRead) = 5 Then
_SQLite_GetTable(-1, "SELECT bula FROM tabelle WHERE plz = '" & $sRead & "';", $aResult, $iRows, $iColumns)
If $iRows Then
GUICtrlSetData($inBuLand, $aResult[2])
Else
GUICtrlSetData($inBuLand, 'Keine gültige Postleitzahl!')
EndIf
$fShow = 1
Else
GUICtrlSetData($iIDFrom, StringLeft($sRead, 5))
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND -
Solche wenig ergiebigen (und wenig sinnvollen) Threads haben wir schon öfter gehabt. Das hat null Wert!
[CLOSED]
-
Na dann mal noch vor Tagesende auch von mir ein "Happy Birthday".
-
Autsch, einmal Variablenname zuviel

Geändert in Post #1