Lieber Besucher, herzlich willkommen bei: AutoIt.de - Das deutsche AutoIt-Forum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
Benutzerinformationen überspringen
Registrierungsdatum: 21. Juni 2011
Wohnort: Griesheim
Beruf: Softwareentwickler
Spoiler
Func BELEGPOSITIONEN_IMPORT($strBelegTyp, $STRBELEGNUMMER, $STRKUNDE, $STRPROJEKTNAME)
Local $rsBelegP
Local $strSQL = ""
Local $Kennung = 0
Local $Menge = 0
Local $strME = "Stück"
Local $strArtikelnummer = ""
Local $strArtikelBezeichnung = ""
Local $strArtikelZusatz = ""
Local $ArtikelEPreis = 0
Local $strArtikelLangText = ""
Local $LangTextLaenge = 0
Local $strString = ""
Local $strControlID = ""
Local $strClass = ""
Local $Posnummer = 0
Local $Editnummer = 0
Local $c = 0
Local $HWnd = ""
Local $HWndEdit = ""
Local $strTitle = ""
$strSQL = "SELECT * FROM BELEGP WHERE BELEGP.Belegtyp = '" & $strBelegTyp & "' AND BELEGP.Belegnummer='" & $STRBELEGNUMMER & "'"
$strSQL = $strSQL & " AND Zeilentyp in ('A') AND BELEGP.Artikelnummer <> '' AND Menge > 0 ORDER BY BELEGP.Posnummer;"
ADO_OPEN_RECORDSET($ADOCONN, $rsBelegP, $strSQL) ; Gibt Recordset zurück
; Weiter mit der Positionsverarbeitung
BlockInput(1)
Sleep(1000)
MsgBox(262144, "DEBUG Belegkopf", "Wurde jetzt geschlossen ...", 2)
Sleep(1000)
MsgBox(262144, "DEBUG Ordner Fenster", "Jetzt muss Positionsverarbeitung geöffnet werden ...", 2)
MouseMove( 540, 500 ) ; Maus auf Positons-Button
MouseClick("Left", 540,500, 1 )
Sleep(1000)
;Sleep(300)
;Send("{ALTDOWN}p{ALTUP}") ; Positionsverarbeitung öffnen DAS FUNKTIONIERT SO GUT WIE NIE, DESHALB OBEN DER MAUSKLICK.
Sleep(500)
MsgBox(262144,"DEBUG BelegP","Eingabe Positionsart/ Anzahl Positionen " & $rsBelegP.Recordcount, 2)
$strTitle = $STRKUNDE & " / "
$HWnd = WinActivate($strTitle,$STRPROJEKTNAME)
if IsHWnd($HWnd) Then
While Not $rsBelegP.EOF
$Kennung = $rsBelegP.Fields("Kennung" ).Value ; Wird für den Langtext-Schlüssel gebraucht
$Menge = $rsBelegP.Fields("Menge" ).Value
$strME = "Stück"
$strArtikelnummer = $rsBelegP.Fields("Artikelnummer" ).Value
$strArtikelBezeichnung = $rsBelegP.Fields("Bezeichnung" ).Value
$strArtikelZusatz = $rsBelegP.Fields("Zusatz" ).Value
$ArtikelEPreis = $rsBelegP.Fields("Einzelpreis" ).Value
; Langtext lesen , falls vorhanden
$strSQL = "BPKennung=" & $Kennung
$strBelegTyp = "BP"
$strString = ""
$strArtikelLangText = ""
$strArtikelLangText = ADO_ReadDBField_Text($ADOCONN, $strSQL, $strBelegTyp, $strString)
$LangTextLaenge = StringLen($strArtikelLangText)
MsgBox(262144,"DEBUG BelegP","Position : " & $strArtikelnummer, 2)
MsgBox(262144,"DEBUG BelegP","Rein in die Menge " & $Menge, 2)
$Posnummer = $Posnummer + 1
#cs
-----------------------------------------------------------------------------------------------
So hätte ich es gerne, aber so funktioniert es nicht
-------------------------------------------------------------------------------------------
$EditBelegnummer = 0
$HWndEdit = ErmittleEditHandle($Posnummer, $EditBelegnummer)
If IsHWnd($HWndEdit) Then
ControlSetText($HWndEdit,"","",">") ; Positionsart
EndIf
$EditBelegnummer = 1
$HWndEdit = ErmittleEditHandle($Posnummer, $EditBelegnummer)
If IsHWnd($HWndEdit) Then
ControlSetText($HWndEdit,"","","{TAB}") ; Positionnummernfeld
EndIf
$EditBelegnummer = 2
$HWndEdit = ErmittleEditHandle($Posnummer, $EditBelegnummer)
If IsHWnd($HWndEdit) Then
ControlSetText($HWndEdit,"","","{DEL 10}" & $Menge) ; Menge
EndIf
Sleep(2000)
$EditBelegnummer = 1001
$HWndEdit = ErmittleEditHandle($Posnummer, $EditBelegnummer)
If IsHWnd($HWndEdit) Then
ControlSetText($HWndEdit,"","","Stück") ; Mengeneinheit
EndIf
$EditBelegnummer = 4
$HWndEdit = ErmittleEditHandle($Posnummer, $EditBelegnummer)
If IsHWnd($HWndEdit) Then
ControlSetText($HWndEdit,"","",$strArtikelnummer & "{ENTER}") ; Arikelnummer
EndIf
#ce
; ------------------------------------------------------------------------------------------------------------
; Alternativer Ansatz, geht aber auch nicht.
;-------------------------------------------------------------------------------------------------------------
ControlClick("[CLASS:Edit; INSTANCE:7]", "[ID:2]",1)
MsgBox(262144,"DEBUG BelegP","Rein in die Menge " & $Menge, 2)
ControlSend("[CLASS:Edit; INSTANCE:7]","",2,"{DEL 10}" & $Menge) ; Menge
ControlSend("[CLASS:Edit; INSTANCE:8]","",1001,"Stück{TAB}") ; Mengeneinheit
Send($strArtikelnummer & "{ENTER}") ; Arikelnummer
Send("^a{DEL}") ; Automatische Texte aus Artikelstamm markieren und entfernen
Sleep(1000)
Send($strArtikelnummer & "{ENTER}") ; Artikelnummer und Bezeichnung in den Langtext eintragen
Sleep(500)
Send($strArtikelBezeichnung & " " & $strArtikelZusatz & "{ENTER}")
Sleep(500)
; Langtext einfügen
If $LangTextLaenge > 0 then
Send(@CRLF & $strArtikelLangText)
EndIf
; Texte Übergabe abschliessen mit TAB
Send("{TAB}")
; Einzelpreis einfügen
Send($ArtikelEPreis & "{TAB}")
Sleep(500)
$rsBelegP.MoveNext
WEnd
EndIf
Send("{F2}") ; Endsummen eintragen
Sleep(1000)
Send("{F8}") ; Speichern und Schliessen
Sleep(1000)
$rsBelegP.Close
BlockInput(0)
Return True
EndFunc ;==>BELEGPOSITIONEN_IMPORT
umme:
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »msdotz« (24. Juni 2011, 16:44) aus folgendem Grund: Bild ist nicht da
Benutzerinformationen überspringen
Registrierungsdatum: 21. Juni 2011
Wohnort: Griesheim
Beruf: Softwareentwickler
.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »msdotz« (25. Juni 2011, 09:21)
ControlGetHandle ist da schon die richtige Funktion. Die notwendige ControlID kannst Du auf viele verschiedene Arten angeben. Guckst Du hier (englisch) oder hier (deutsch). Was Du angibst, hängt davon ab, was eindeutig und verfügbar ist.
Zitat
Gibt es eine Funktion, der ich den Namen eines Controls in einer Variblen übergeben kann und die mir bei Erfolg den HWnd zurückgibt?
Ja. HWnd ist unique bis das Control neu erstellt wird d.h. das GUI neu generiert wird.
Zitat
Und kann ich den HWnd eines Controls in jeder Funktion statt "[CLASS:xxxxxx; INSTANCE:y]" verwenden?