... ich habs verstanden...
Besten Dank
Beiträge von De Rand Ere
-
-
Hallo zusammen und Danke für die Antworten, auf die ich gerne eingehen möchte.
Ich bin Autodidakt und so sehen auch meine Script's aus. Sehr chaotisch und ich glaube recht schwer verständlich - auch wenn Ihr darin geübt seid. Ich wollte Euch nicht dieses Durchfitzen auflasten.
Zitat1. Frage: Wo kommen diese Pfadangaben her? Du musst ja irgendwo definieren welche Ordner bearbeitet werden.
Die Pfadangaben erzeuge ich mit "_RecursiveFileListToArray" (Danke an den Autor). Ich muß sie nachbehandeln, um die Vorgaben des Zip-CLI zu entsprechen. Das Problem waren anfangs die Leerzeichen in den Ordner- und Dateinamen.
Zitat
Wenn es nur der Aufruf ist - warum dann RunWait und nicht Run()? Mit letzterem hättest du nämlich deine Parallelität.Ich nutzte "RunWait" da es sich um ca. 1500 Verzeichnisse, mehreren 100.000 Dateien oder grob 2 TB Datenvolumen handelte. Mit "Run" würde meine WinDose einschlafen und diese unkontrollierte Aktion würde sehr lange dauern. Mir war wichtig das Zippen zu automatisieren und dazu schrieb ich ein lineares Script. Später kam mir der Gedanke zur kontrollierten parallelen Verarbeitung. Das versuch ich jetzt. Um den ZipProzess selbst werden noch einige statistische Daten und die Zeitvorschau berechnet (wann fertig). Mir geht es um die Kontrolle wie viele Prozesses gestartet werden.
ZitatWährend in Autoit " und ' meist alternativ zu verwenden sind, ist bei Export nach DOS " <>'.
D.H. Du musst dafür sorgen, dass die " in Dos ankommen. DOS mag keine '
Danke für diese Hinweis - war mir bis jetzt nicht bekannt ..
Und nein ich möchte nicht das mir jemand ein Scirpt schreibt. Wie oben erwähnt - Autodidakt - ich will das selbst in die Tastatur hämmern. Das macht mir Spaß das Tüfteln, egal was Andere sagen ... learning by doing
Fazit:
Wenn ich im bereits lauffähigen Script mit "Run" arbeiten möchte, müßte ich also über eine Schleife die Anzahl der ZipAufrufe steuern. Über die Id des Prozesses könnte das bestimmt gehen.
Sehe ich das richtig ?
Den ganzen andern Krempel könnte ich mir sparen....
-
Hallo zusammen,
ich habe mir ein Skript erstellt, das in einem Ordner alle Unterordner in separate ZipDateien packt, diese in diesem Ordner ablegt und die "alten" Ordner löscht. Alles gut - alles hübsch.... Dazu nutze ich einen externen Packer über CLI (Command Line Interface) mit "RunWait"
Das läuft nun linear - also Ordner 1 bis Ordner 67 wird durchgehackt ...Geht ja aber auch parallel - Ich könnte also ein Hauptprogramm (zur Verwaltung) starten und aus diesem heraus das ZipProgramm mit Übergabe der Parameter starten und das auf 3 bis 5 Prozesse begrenzen, je nach Rechnerleistung.
Daran teste ich nun schon ein paar Tage. Die Übergabe der Parameter ist aber sehr schwierig, da sehr lang und mit Leerzeichen behaftet. Hier mal als Beispiel ein Aufruf: "Zip.exe u -r -m1 -ep4 "_Hörbuch\_TestArchiv-2" "F:\_Hörbuch\_TestArchiv-2\Agatha Christie - 24 Schwarzdrosseln.zip" "F:\_Hörbuch\_TestArchiv-2\Agatha Christie - 24 Schwarzdrosseln\*"
Über das $cmdLine - Array diese Parameter zu übertragen ist sehr schwieg, da der Einsatz der Zeichen ", ' und chr(34) in Variablen verpackt ganz eigenartige Ergebnisse erzeugt. Den immer gleichen Aufruf "Zip.exe u -r -m1 -ep4 " hab ich nun in einen Umgebungsvariable geschoben und brauche ihn nicht mehr im Aufruf übertragen. Ich hoffe, daß ich die Situation verständlich beschrieben habe....
Ich will nun die Parameterdaten in ein Array schreiben.
Und jetzt kommt meine Frage:Kann ich im "Hauptprogramm" ein Array ($aParameter) erzeugen, 3 ZipProgramme (Call...-Aufruf) ausführen und von diesen auf das Array $aParameter zugreifen? Also kann ich ein Array "Über - global" stellen damit mehrere zugreifen können?
Ich könnte auch das Array in eine TXT schreiben und so die Daten übertragen... Aber geht es kürzer ????
Vorab vielen Dank
-
BugFix : Ja danke - mach mal ist man im Kopf wie vernagelt! Nach vorne schaun, die Lösung suchen - aber die Ursache nicht prüfen... danke
Das habe ich nun getan. Es liegt nicht an dem Script des "Herr Mendelson von der Columbia (PDFtoPrinter)". 95% dieses Scripts sind Fehlerprüfung - das brauch ich nicht, da ich den Programmaufruf exakt definieren und testen kann. Somit habe ich das Programm (PDFXcView) direkt angesprochen . Die Software arbeitet super bis zum zweiten Aufruf. Die Änderung der Einstellungen des Programms und der spezielle Import dieser - brachte auch nichts. Ich habe keine Lösung finden können. Selbst aus der DOS-Ebene heraus mit der direkten Ansprache der Software und Wiederholung des Befehls tritt der Fehler auf. Ursache ist also " PDFXcView" und dessen Speicherverwaltung ... Die Software ist gut - leider nicht geeignet für meine Anwendung. Da ich nun schon ganz paar Tage an diesem Problem rumdoktere, habe ich heute SumatraPDF implementiert. Also "nur" die EXE und die Befehlsoptionen angepasst - und es funktioniert - 2 Seiten bleiben 2 Seite , auch nach 10x aufrufen.
Etwas nachteilig sind die etwa 10x größeren Druck-Dateien die durch SumantarPdf erzeugt werde ...
Ich danke allen, die sich irgendwie Gedanken gemacht haben ...
Das Thema ist erledigt.
-
Hallo noch mal zusammen,
ich hab nun mal einen „Rahmen“ um die Tabellenfunktion gebastelt. Somit könnt ihr das Problem besser nachvollziehen. Dabei habe ich festgestellt, daß das Problem nicht von der MPDF.au3 sondern von der PDFtoPrinter.exe kommt.
Spoiler anzeigen
C
Alles anzeigen#include-once #include <Array.au3> #include <ButtonConstants.au3> #include <File.au3> #include <FileConstants.au3> #include <GUIConstantsEx.au3> #include <MPDF_UDF.au3> #include <WindowsConstants.au3> Global $aPakete[100][7] Global $vLaenge_PaketListe = 100, $idPaketListe For $I = 0 To 99 $aPakete[$I][0] = "1234567890123456" $aPakete[$I][1] = "Max Tutldö" & $I $aPakete[$I][2] = "12" $aPakete[$I][3] = "3" $aPakete[$I][4] = "01.10.1732" $aPakete[$I][5] = "09.10.1732" $aPakete[$I][6] = "05.10.1732" Next ;~ _ArrayDisplay($aPakete) $hGui = GUICreate("PRN-Test", 600, 600) $vDrucken = GUICtrlCreateButton("Drucken",50,50,100,40) $vBeenden = GUICtrlCreateButton("Exit",50,100,100,40) GUISetState(@SW_SHOW, $hGui) While 1 Switch GUIGetMsg() Case $vDrucken _Liste_drucken($aPakete,1, 0, 1) ; Druck ohne Ansicht ;~ _Liste_drucken($aPakete,1, 1, 1) ; Druck mit Ansicht Case $vBeenden Exit EndSwitch WEnd Func _Liste_drucken($aDBank, $iListe, $vV, $vP) Local $vTabellenName, $vSpalte1_Kopf, $vSpalte2_Kopf, $vSpalte3_Kopf, $vSpalte4_Kopf, $vSpalte5_Kopf, $vSpalte6_Kopf, $vSpalte6_Kopf Global $vLogDateiName If $iListe > 2 Then $vLogDateiName = StringTrimRight($vLogDateiName,5) ;setze die PDF - HeaderEinträge _SetTitle("Listen Druck") _SetSubject("Firma") _SetKeywords("") _OpenAfter($vV) ;open after generation _SetUnit($PDF_UNIT_CM) _SetPaperSize("A4") _SetZoomMode($PDF_ZOOM_CUSTOM, 100) _SetOrientation($PDF_ORIENTATION_PORTRAIT) _SetLayoutMode($PDF_LAYOUT_CONTINOUS) ;initialize the pdf Local $vPDFDatei = "\etc\Listendruck_" & @MIN & "-" & @SEC &".pdf" _InitPDF(@ScriptDir & $vPDFDatei) _LoadFontTT("F1", $PDF_FONT_TIMES,$PDF_FONT_BOLDITALIC) _LoadFontTT("_Calibri", $PDF_FONT_CALIBRI) _SetColourFill(0x000000) _SetColourStrokE(0x000000) Local $vTxtUnterkante = 26.5 ; Unterkante der Texte in der kopfzeile Local $vTabellenZeilen = $vLaenge_PaketListe ; Anzahl der gesamten Zeileneinträge in der Tabelle. Auf eine Seite passen 45 Zeilen. Local $vZeilen = 45 ; Zeilen, die auf eine Seite passen Local $vSeiten = Round(Int($vTabellenZeilen / 45)) + 1 ;notwendige Seiten berechnen Local $vStartNumTab = 0 If $vTabellenZeilen < $vZeilen Then $vZeilen = $vTabellenZeilen EndIf Local $vEndeNumTab = $vZeilen ConsoleWrite("TabZeilen: " & $vTabellenZeilen & " - Seiten: " & $vSeiten & @CR) For $J = 1 to $vSeiten _BeginPage() $vSpalte1_Kopf = "EAN - Code" $vSpalte2_Kopf = "Name des Empfängers" $vSpalte3_Kopf = "Lagerfach" $vSpalte4_Kopf = "lfd Nummer" $vSpalte5_Kopf = "Zulauf" $vSpalte6_Kopf = "Rücksendung"; Bezeichnung ???? eventuell Daten des Zulaufs ... unklar .... $vSpalte7_Kopf = "gebucht" _Draw_Rectangle(1.5, 26.3, 18.3, 2, $PDF_STYLE_STROKED, 0, 0xefefef, 0.05) ; Rahmen Tabellenkopf Switch $iListe Case 1 ;Tabellenkopf zusammenstellen $vTabellenName = "Paketbestandsliste vom " & @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC & " Uhr" _DrawText( 19.8, 28.5, $vTabellenName, "F1", 14, $PDF_ALIGN_RIGHT) ; TabellenName _DrawText( 03.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER); Spalte1_Kopf _DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT); Spalte2_Kopf _DrawText( 13.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT,90) ; Spalte3_Kopf _DrawText( 14.3, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_LEFT,90) ; Spalte4_Kopf _DrawText( 15.5,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile _DrawText( 15.5, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 2. Zeile _DrawText( 17.8, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile _DrawText( 17.8, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 2. Zeile _DrawText( 19.5, $vTxtUnterkante, "Check", "_Calibri", 10, $PDF_ALIGN_LEFT,90) ; local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse local $vXSpalte_2 = 04.8 local $vXSpalte_3 = 13.0 local $vXSpalte_4 = 13.8 local $vXSpalte_5 = 14.5 local $vXSpalte_6 = 16.7 local $vXSpalte_7 = 19.0 local $vXSpalte_8 = 19.8 Local $vXTxtSpalte_1 = 03.2 ; Definition des Textbegin X-Achse local $vXTxtSpalte_2 = 05.0 local $vXTxtSpalte_3 = 13.4 local $vXTxtSpalte_4 = 14.2 local $vXTxtSpalte_5 = 15.6 local $vXTxtSpalte_6 = 17.9 $vTabStartY = 25.8 $Y = -0.2 For $I = $vStartNumTab to $vEndeNumTab - 1 $vEmpfaenger = $aDBank[$I][1] If StringLen($vEmpfaenger)>= 50 Then $vEmpfaenger = StringLeft($vEmpfaenger,47) & "..." EndIf ;~ ConsoleWrite("Case 2 - $vEmpfaenger: " & $vEmpfaenger & @CR) _DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT) _DrawText( $vXTxtSpalte_1, $vTabStartY , $aPakete[$I][0], "_Calibri", 10, $PDF_ALIGN_CENTER) _DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen _DrawText( $vXTxtSpalte_3, $vTabStartY , $aDBank[$I][2], "_Calibri", 10, $PDF_ALIGN_CENTER) _DrawText( $vXTxtSpalte_4, $vTabStartY , $aDBank[$I][3], "_Calibri", 10, $PDF_ALIGN_CENTER) _DrawText( $vXTxtSpalte_5, $vTabStartY , $aDBank[$I][4], "_Calibri", 10, $PDF_ALIGN_CENTER) _DrawText( $vXTxtSpalte_6, $vTabStartY , $aDBank[$I][5], "_Calibri", 10, $PDF_ALIGN_CENTER) _DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05) $vTabStartY += -0.55 Next Case 2 EndSwitch $vTabStartY += 0.55 - 0.1 ; Zeile berechnen ;~ senkrechte Linien zeichnen Local $vLinienEnde = 26.3 - 2 -$vZeilen * 0.415 _DrawLine($vXSpalte_1,$vTabStartY,$vXSpalte_1,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_2,$vTabStartY,$vXSpalte_2,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_3,$vTabStartY,$vXSpalte_3,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_4,$vTabStartY,$vXSpalte_4,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_5,$vTabStartY,$vXSpalte_5,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_6,$vTabStartY,$vXSpalte_6,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_7,$vTabStartY,$vXSpalte_7,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawLine($vXSpalte_8,$vTabStartY,$vXSpalte_8,28.3, $PDF_STYLE_STROKED, 0, 0,0.05) _DrawText( 19.8, 1, "Seite "& $J & " von " & $vSeiten, "_Calibri", 10, $PDF_ALIGN_RIGHT) ; Fußzeile _EndPage() ;write the buffer to disk If $vEndeNumTab < $vTabellenZeilen Then $vStartNumTab = $vEndeNumTab ;+ 1 If $vStartNumTab + 45 >= $vTabellenZeilen Then $vEndeNumTab = $vTabellenZeilen Else $vEndeNumTab = $vStartNumTab + 45 EndIf EndIf Next _ClosePDFFile() $_Pages = 0 ; Seitenzahl in der MPDF.au3 wieder auf '0' setzen ;~ autoDruckfunktion aktivieren/deaktivieren If $vP = True Then ;Ausdruck mit Acrobat ;~ $vArcobat = ShellExecute(@ScriptDir & $vPDFDatei,"","","print",@SW_HIDE) ;~ Sleep(10000) ;~ ProcessClose($vArcobat) ;Ausdruck mit PDFtoPrinter Local $vProgramm = @ScriptDir & "\PDFtoPrinter.exe " & @ScriptDir & $vPDFDatei $idAcrobat = RunWait($vProgramm, "", "") EndIf EndFunc
Spoiler
Es wird also eine Tabelle mit 100 Einträgen erstellt. Das ergibt ein Dokument mit 3 Seiten. Nutze ich bei Zeile 179 den ShellExecute – Befehl zum Drucken wird die Tabelle ordentlich im Acrobat angezeigt und in der Warteschlange (Drucker angehalten) wird immer ein 3-seitiges Dokument angezeigt – auch bei mehrfacher Wiederholung. Benutze ich zum Drucken die PDFtoPrinter-Funktion wird die Tabelle richtig angezeigt aber in der Warteschlange steigt die Seitenzahl des Dokuments bei jeder Wiederholung um 3 Seiten, also 3 -6 – 9 usw.
Der Fehler liegt also bei PDFtoPrinter. Dieses Programm gibt’s hier: http://www.columbia.edu/~em36/pdftoprinter.html Auch den Sourccode (AutoIt) kann man sich ansehen: http://www.columbia.edu/~em36/PDFtoPrinter.au3 Der PDFtoPrinter muß im Scriptverzeichnis liegen. Und die MDPF.au3 muß installiert sein.
Sicherlich ist „ShellExecute(…“print“)“ eine Lösung aber die Zeit zum Öffnen des Acrobat und dann zum Drucken ist schwer abzuschätzen. Hier im Beispiel mit 10sec-Sleep eingetragen. Und ich muß den Acrobat jedes mal schließen. Je nach Rechenleistung des PC’s ist diese Zeit immer unterschiedlich. Und das plötzliche Öffnen eines neuen Fensters irritiert den Anwender.
Hat jemand ne Idee ???
-
Hallo zusammen,
seit längerem wende ich mich mal wieder mit einem Problem an Euch und ich hoffe Euch fällt dazu etwas ein.
Vor ca. 2 Jahren habe ich eine stochastische Lagerverwaltung für "bewegliche Güter(Pakete)" geschrieben. Die läuft auch gut - hat aber immer wieder Probleme mit dem IE. Die Generierung von notwendigen Tabellen hatte ich mittels HTML gelöst. Ich erstellte im IE eine leere Seite und generierte dann meine Tabellen. Mit der Umstellung von MS auf Edge gibt es da immer wieder Probleme, da im IE "Werbeseiten" eingeblendet werden und eine leere Seite nicht aufgerufen wird bzw. nicht angesprochen wird oder kann.
Somit hab ich mich entschlossen die Tabellen in einem PDF-Dokument zu erzeugen. Werkzeug dazu ist die MPDF.au3. Nach reichlich Testen und Probieren funzt das nun auch alles super.
ABER es gibt Probleme - genauer nur noch ein Problem!
Vor 2 Tagen hatte ich noch das Problem, daß ich bei mehrfachen Aufruf der TabebellenGenerator-Funktion sich die Seitenzahl aller, seit Laufzeitbeginn erstellten PDF-Dokumente addierte. Das konnte ich lösen, in dem ich die globale Variable der MPDF.au3 "$_Pages" immer wieder auf "0" setze.
Nun das aktuelle Problem:
Ich generiere ein Dokument mit 1 Seite. In der Druckerwarteschlange (zum Test angehalten) wird ein Dokument mit 1 Seite angezeigt. Ich wiederhole das noch mal - in der Druckerwarteschlange wird ein Dokument mit 2 Seiten angezeigt. Wiederholung - 3 Seiten, Wiederholung 4 Seiten ... Dokument mit 12 Seiten = 16 Seiten in der Druckerwarteschlange ...
Ich benutze zum ungestörtem Drucken PDFtoPrinter. Das habe ich gerade überprüft. Sobald der Druck durch ist wird das Temp-Verzeichnis gelöscht und zu jedem neuem Druck neu aufgerufen / ins Temp geschrieben. Das kann es nicht sein - denke ich ...
Auch die "Minuten-Sekunden-genaue" Bezeichnung des generierten PDF-Dokuments half nicht weiter. Mein Gedanke war, daß es dann verschiedene Dateien sein müßten.
Ich denke der "Fehler" liegt in der MPDF.au3.
Bei mehrfachem Aufruf der Funktionen wird der "Zwischenspeicher" nicht gelöscht und alle neu generierten Dokumente hinten ran geschrieben. Erst wenn ich mein Script beende und neu starte - wird MPDF.au3 neu geladen und das Spiel fängt von vorne an.
Leider bin ich in der objektorientierten bzw. in der windowsinternen Programmierung nicht so toll bewandert.
Hier ein Beispiel zur Druckerwarteschlange:
Erklärung zum Bild:
1. Dokument - 1 Seite
2. Dokument - 1 Seite
3. Dokument - 1 Seite
4. Dokument - 12 Seiten
Und das ist meine Funktion zur Generierung der Tabellen - leider nicht lauffähig. Die etwas über 2000 Zeilen wollt ich hier nicht rein stellen und um diese Funktion einen Rahmen zu basteln hatte ich noch nicht die Zeit.
Spoiler anzeigen
Func _Liste_drucken($aDBank, $iListe, $vV, $vP)
Local $vTabellenName, $vSpalte1_Kopf, $vSpalte2_Kopf, $vSpalte3_Kopf, $vSpalte4_Kopf, $vSpalte5_Kopf, $vSpalte6_Kopf, $vSpalte6_Kopf
Global $vLogDateiName
If $iListe > 2 Then $vLogDateiName = StringTrimRight($vLogDateiName,5)
;setze die PDF - HeaderEinträge
_SetTitle("Listen Druck")
_SetSubject("Firma")
_SetKeywords("")
_OpenAfter($vV) ;open after generation
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 100)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
;initialize the pdf
Local $vPDFDatei = "\etc\Listendruck_" & @MIN & "-" & @SEC &".pdf"
_InitPDF(@ScriptDir & $vPDFDatei)
_LoadFontTT("F1", $PDF_FONT_TIMES,$PDF_FONT_BOLDITALIC)
_LoadFontTT("_Calibri", $PDF_FONT_CALIBRI)
_SetColourFill(0x000000)
_SetColourStrokE(0x000000)
Local $vTxtUnterkante = 26.5 ; Unterkante der Texte in der kopfzeile
Local $vTabellenZeilen = $vLaenge_PaketListe ; Anzahl der gesamten Zeileneinträge in der Tabelle. Auf eine Seite passen 45 Zeilen.
Local $vZeilen = 45 ; Zeilen, die auf eine Seite passen
Local $vSeiten = Round(Int($vTabellenZeilen / 45)) + 1 ;notwendige Seiten berechnen
Local $vStartNumTab = 0
If $vTabellenZeilen < $vZeilen Then
$vZeilen = $vTabellenZeilen
EndIf
Local $vEndeNumTab = $vZeilen
ConsoleWrite("TabZeilen: " & $vTabellenZeilen & " - Seiten: " & $vSeiten & @CR)
For $J = 1 to $vSeiten
_BeginPage()
$vSpalte1_Kopf = "EAN - Code"
$vSpalte2_Kopf = "Name des Empfängers"
$vSpalte3_Kopf = "Lagerfach"
$vSpalte4_Kopf = "lfd Nummer"
$vSpalte5_Kopf = "Zulauf"
$vSpalte6_Kopf = "Rücksendung"; Bezeichnung ???? eventuell Daten des Zulaufs ... unklar ....
$vSpalte7_Kopf = "gebucht"
_Draw_Rectangle(1.5, 26.3, 18.3, 2, $PDF_STYLE_STROKED, 0, 0xefefef, 0.05) ; Rahmen Tabellenkopf
Switch $iListe
Case 1
;Tabellenkopf zusammenstellen
$vTabellenName = "Paketbestandsliste vom " & @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC & " Uhr"
_DrawText( 19.8, 28.5, $vTabellenName, "F1", 14, $PDF_ALIGN_RIGHT) ; TabellenName
_DrawText( 03.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER); Spalte1_Kopf
_DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT); Spalte2_Kopf
_DrawText( 13.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT,90) ; Spalte3_Kopf
_DrawText( 14.3, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_LEFT,90) ; Spalte4_Kopf
_DrawText( 15.5,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile
_DrawText( 15.5, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 2. Zeile
_DrawText( 17.8, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile
_DrawText( 17.8, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 2. Zeile
_DrawText( 19.5, $vTxtUnterkante, "Check", "_Calibri", 10, $PDF_ALIGN_LEFT,90) ;
local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse
local $vXSpalte_2 = 04.8
local $vXSpalte_3 = 13.0
local $vXSpalte_4 = 13.8
local $vXSpalte_5 = 14.5
local $vXSpalte_6 = 16.7
local $vXSpalte_7 = 19.0
local $vXSpalte_8 = 19.8
Local $vXTxtSpalte_1 = 03.2 ; Definition des Textbegin X-Achse
local $vXTxtSpalte_2 = 05.0
local $vXTxtSpalte_3 = 13.4
local $vXTxtSpalte_4 = 14.2
local $vXTxtSpalte_5 = 15.6
local $vXTxtSpalte_6 = 17.9
$vTabStartY = 25.8
$Y = -0.2
For $I = $vStartNumTab to $vEndeNumTab - 1
$vEmpfaenger = $aDBank[$I][1]
If StringLen($vEmpfaenger)>= 50 Then
$vEmpfaenger = StringLeft($vEmpfaenger,47) & "..."
EndIf
;~ ConsoleWrite("Case 2 - $vEmpfaenger: " & $vEmpfaenger & @CR)
_DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT)
_DrawText( $vXTxtSpalte_1, $vTabStartY , $aPakete[$I][0], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen
_DrawText( $vXTxtSpalte_3, $vTabStartY , $aDBank[$I][2], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_4, $vTabStartY , $aDBank[$I][3], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_5, $vTabStartY , $aDBank[$I][4], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_6, $vTabStartY , $aDBank[$I][5], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05)
$vTabStartY += -0.55
Next
Case 2
$vTabellenName = "Paket - Rücksendeliste vom " & @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC & " Uhr"
_DrawText( 19.9, 28.5, $vTabellenName, "F1", 16, $PDF_ALIGN_RIGHT) ; TabellenName
_DrawText( 03.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER); Spalte1_Kopf
_DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT); Spalte2_Kopf
_DrawText( 13.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT,90) ; Spalte3_Kopf
_DrawText( 14.3, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_LEFT,90) ; Spalte4_Kopf
_DrawText( 15.5,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile
_DrawText( 15.5, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 2. Zeile
_DrawText( 17.8, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile
_DrawText( 17.8, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 2. Zeile
_DrawText( 19.5, $vTxtUnterkante, "Check", "_Calibri", 10, $PDF_ALIGN_LEFT,90) ;
local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse
local $vXSpalte_2 = 04.8
local $vXSpalte_3 = 13.0
local $vXSpalte_4 = 13.8
local $vXSpalte_5 = 14.5
local $vXSpalte_6 = 16.7
local $vXSpalte_7 = 19.0
local $vXSpalte_8 = 19.8
Local $vXTxtSpalte_1 = 03.2 ; Definition des Textbegin X-Achse
local $vXTxtSpalte_2 = 05.0
local $vXTxtSpalte_3 = 13.4
local $vXTxtSpalte_4 = 14.2
local $vXTxtSpalte_5 = 15.6
local $vXTxtSpalte_6 = 17.9
$vTabStartY = 25.8
$Y = -0.2
;~ Daten werden aus dem ListView gelesen
Local $vNr = _GUICtrlListView_GetItemCount($idPaketListe)
;~ ConsoleWrite("Case 2 - $vNr: " & $vNr & @CR)
For $I = 0 To $vNr - 1
If _GUICtrlListView_GetItemChecked($idPaketListe, $I) = True Then
$vEmpfaenger = _GUICtrlListView_GetItemText($idPaketListe, $I, 1)
If StringLen($vEmpfaenger)>= 50 Then
$vEmpfaenger = StringLeft($vEmpfaenger,47) & "..."
EndIf
ConsoleWrite("Case 2 - $vEmpfaenger: " & $vEmpfaenger & @CR)
Local $vText1 = _GUICtrlListView_GetItemText($idPaketListe, $I, 0)
Local $vText3 = _GUICtrlListView_GetItemText($idPaketListe, $I, 2)
Local $vText4 = _GUICtrlListView_GetItemText($idPaketListe, $I, 3)
Local $vText5 = _GUICtrlListView_GetItemText($idPaketListe, $I, 4)
Local $vText6 = _GUICtrlListView_GetItemText($idPaketListe, $I, 5)
_DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT)
_DrawText( $vXTxtSpalte_1, $vTabStartY , $vText1, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen
_DrawText( $vXTxtSpalte_3, $vTabStartY , $vText3, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_4, $vTabStartY , $vText4, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_5, $vTabStartY , $vText5, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_6, $vTabStartY , $vText6, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05)
$vTabStartY += -0.55
EndIf
Next
Case 3 To 5 ; 3 = Zulauf, 4 = Ausgabe, 5 = PRS
;~ $vTabellenName = "Log-Datei: " & $vLogDateiName
$vSpalte7_Kopf = "gebucht"
If $iListe = 3 Then
_DrawText( 19.0, 28.6, "Paket - Zulauf Log-Datei: " & $vLogDateiName, "F1", 16, $PDF_ALIGN_RIGHT)
ElseIf $iListe = 4 Then
_DrawText( 19.0, 28.6, "Paket - Ausgabe Log-Datei: " & $vLogDateiName, "F1", 16, $PDF_ALIGN_RIGHT)
ElseIf $iListe = 5 Then
_DrawText( 19.0, 28.6, "Paket - Rücksendung Log-Datei: " & $vLogDateiName, "F1", 16, $PDF_ALIGN_RIGHT)
EndIf
;~ _DrawText( 13.0, 28.5, $vTabellenName, "_Calibri,Bold", 14, $PDF_ALIGN_LEFT)
_DrawText( 3.2, $vTxtUnterkante, $vSpalte1_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( 05.0, $vTxtUnterkante, $vSpalte2_Kopf, "_Calibri", 10, $PDF_ALIGN_LEFT)
_DrawText( 12.5, $vTxtUnterkante, $vSpalte3_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER,90)
_DrawText( 13.4, $vTxtUnterkante, $vSpalte4_Kopf, "_Calibri", 9, $PDF_ALIGN_CENTER,90)
_DrawText( 13.7,$vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte5_Kopf - 1. Zeile
_DrawText( 13.70, $vTxtUnterkante, $vSpalte5_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ;
_DrawText( 15.95, $vTxtUnterkante + 0.5, "Datum", "_Calibri", 10, $PDF_ALIGN_CENTER) ; Spalte6_Kopf - 1. Zeile
_DrawText( 15.95, $vTxtUnterkante, $vSpalte6_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ;
_DrawText( 18.30, $vTxtUnterkante + 0.5, "Datum | Zeit", "_Calibri", 10, $PDF_ALIGN_CENTER) ;
_DrawText( 18.30, $vTxtUnterkante, $vSpalte7_Kopf, "_Calibri", 10, $PDF_ALIGN_CENTER) ;
local $vXSpalte_1 = 01.5 ; Definition der Spaltenlinien X-Achse
local $vXSpalte_2 = 04.8
local $vXSpalte_3 = 11.3
local $vXSpalte_4 = 12.1
local $vXSpalte_5 = 12.9
local $vXSpalte_6 = 14.9
local $vXSpalte_7 = 17.0
local $vXSpalte_8 = 19.8
Local $vXTxtSpalte_1 = 03.15 ; Definition des Textbegin X-Achse
local $vXTxtSpalte_2 = 04.9
local $vXTxtSpalte_3 = 11.7
local $vXTxtSpalte_4 = 12.5
local $vXTxtSpalte_5 = 13.9
local $vXTxtSpalte_6 = 16.0
local $vXTxtSpalte_7 = 18.4
$vTabStartY = 25.8
$Y = -0.2
For $I = $vStartNumTab to $vEndeNumTab - 1
$vEmpfaenger = $aDBank[$I][1]
If StringLen($vEmpfaenger)>= 34 Then
$vEmpfaenger = StringLeft($vEmpfaenger,33) & "..."
EndIf
_DrawText( $vXSpalte_1 -0.1, $vTabStartY , $I + 1, "_Calibri", 6, $PDF_ALIGN_RIGHT)
_DrawText( $vXTxtSpalte_1, $vTabStartY , $aDBank[$I][0], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_2, $vTabStartY , $vEmpfaenger, "_Calibri", 10, $PDF_ALIGN_LEFT) ; max 43 Zeichen
_DrawText( $vXTxtSpalte_3, $vTabStartY , $aDBank[$I][2], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_4, $vTabStartY , $aDBank[$I][3], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_5, $vTabStartY , $aDBank[$I][4], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_6, $vTabStartY , $aDBank[$I][5], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawText( $vXTxtSpalte_7, $vTabStartY , $aDBank[$I][6]& "|"&$aDBank[$I][7], "_Calibri", 10, $PDF_ALIGN_CENTER)
_DrawLine($vXSpalte_1,$vTabStartY - 0.15,19.8,$vTabStartY + $Y, $PDF_STYLE_STROKED, 0, 0,0.05) ; Zeilenabschlußlinie zeichnen
$vTabStartY += -0.55
Next
EndSwitch
$vTabStartY += 0.55 - 0.1 ; Zeile berechnen
;~ senkrechte Linien zeichnen
Local $vLinienEnde = 26.3 - 2 -$vZeilen * 0.415
_DrawLine($vXSpalte_1,$vTabStartY,$vXSpalte_1,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_2,$vTabStartY,$vXSpalte_2,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_3,$vTabStartY,$vXSpalte_3,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_4,$vTabStartY,$vXSpalte_4,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_5,$vTabStartY,$vXSpalte_5,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_6,$vTabStartY,$vXSpalte_6,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_7,$vTabStartY,$vXSpalte_7,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawLine($vXSpalte_8,$vTabStartY,$vXSpalte_8,28.3, $PDF_STYLE_STROKED, 0, 0,0.05)
_DrawText( 19.8, 1, $vVersion & " - Seite "& $J & " von " & $vSeiten, "_Calibri", 10, $PDF_ALIGN_RIGHT) ; Fußzeile
_EndPage() ;write the buffer to disk
If $vEndeNumTab < $vTabellenZeilen Then
$vStartNumTab = $vEndeNumTab ;+ 1
If $vStartNumTab + 45 >= $vTabellenZeilen Then
$vEndeNumTab = $vTabellenZeilen
Else
$vEndeNumTab = $vStartNumTab + 45
EndIf
EndIf
Next
_ClosePDFFile()
$_Pages = 0 ; Seitenzahl in der MPDF.au3 wieder auf '0' setzen
;~ autoDruckfunktion aktivieren/deaktivieren
If $vP = True Then
;~ $vProgramm = ""
Local $vProgramm = @ScriptDir & "\etc\PDFtoPrinter.exe " & @ScriptDir & $vPDFDatei
;~ ConsoleWrite("Programm: " & $vProgramm & @CR)
$idAcrobat = RunWait($vProgramm, "", "")
EndIf
Ich danke Euch für Eure Mühen und verbleibe mit Besten Dank...
-
Hallo zusammen,
ich schreibe an einer kleinen speziellen Lagerverwaltung. Die Version 0.0000x ist in der Testphase und es zeigt sich wieder: "Das Problem sitzt vor dem Monitor" Ich weiß wo ich hinklicken muß und es läuft gut ... Viele Probleme findet man aber nur in der aktiven Anwendung... kennt ihr ja ...Nun bin ich also dabei die Fehlerquellen zu minimieren. Dazu gehört, daß ich die Anzahl der z.Z. verwendeten GUI's verringere und bereit vorhandene Element nutze.
Das Hauptfenster enthält ein Listwiew in dem der aktuelle Lagerbestand angezeigt wird. Das ist reine Info - Scrollen geht und mehr nicht.
Dann erfolg die Suche nach einem Lagerartikel und ich benutze das vorhandene Listview um bei Mehrfachfindung die möglichen Artikel anzuzeigen. Nach dem Löschen aller Items wird das Listview jetzt mit den gefundenen Artikeln und dem erweitertem Style "$LVS_EX_CHECKBOXES" angezeigt um eine Auswahl treffen zu können.
Bis hier hin läuft alles nach Plan.
Ich kann (ohne Auswahl eines Artikels) mit der Maus über dem "Ausbuchen-Butten" fahren und die geänderte Farbe zeigt mit, daß er aktiv also nutzbar ist. Hab ich natürlich auch getestet. Das Unterprogramm wir gestartet. Bis hier hin also "alles" richtig gemacht.
Wenn ich aber ein gefundenen Artikel "Checke", das Häkchen setze, kann ich danach den "Ausbuch-Button" nicht mehr bedienen. Die Mausüberfahrt bringt auch keine Veränderung der Buttonfarbe und bei einem Klick passiert auch nix. Die HotKey-Function des Button funktioniert allerdings.
Kennt jemand dieses Problem?
Das ListView ist mit _GUICtrlListView_Create erstellt.
Muß ich nach dem "Checken" eine bestimme Befehlsfolge abarbeit?
Die Hilfe zu der Funktion "_GUICtrlListView_SetExtendedListViewStyle" gibt dazu keine Auskunft und auch "_GUICtrlListView_Create" sagt mir "Diese Funktion ist für erfahrene Benutzer und zum erlernen der Funktion von Controls." Ich hab heute den halben Tag versucht das Problem in den Griff zu bekommen ... leider ohne Erfolg.
Ich hätte diese Problemstellung auch aus dem Script ausgeklingt und eingestellt. Die Verknüpfungen im Script lassen das aber nicht zu. Ich müßte das gesamte Script und eine zusätzliche "Lagerdatei" einsellen. Das kann ich machen, wenn gewünscht. Wollte aber erst mal anfragen ob diese Problematik bekannt ist. Beim Doktor Gokkel find ich ca. 7 Artikel, die aber nur am Rande mit meinem Problem zu tun haben und keine Lösung darstellen.
Ich hoffe auf Eure Hilfe ... und vorab ... Vielen Dank
-
Ich hab da auch noch einen zu SciTE...
Bei einem Ausdruck wird immer der Hintergrund (hellgrau) mit ausgedruckt. Das macht den Druck schlechter lesbar.So kann man's ändern:
- SciTE im AdminModus starten (RechtsKlick, ausführen als..), sonst kannst Du die Datei nicht speichern
- unter "Optionen" den Menupunkt "Open Global Options File" anklicken
- in dieser Datei den Abteilung "# Printing" suchen und
- den Eintag "#print.colour.mode=1" auf "print.colour.mode=3" ändern. Also die Raute rausnehmen und den Wert ändern
- SciTE neu starten (ohne Admin) und einen sauberen Hintergrund haben
-
Vielen Dank für Deine Mühe BugFix ...
-
Hallo zusammen,
die Funktion "MsgBox" erfüllt sicher ihren Zweck. Ich denke meist zu Fehlersuche. In einer Anwendung ist sie doch sehr begrenzt.So hab ich mir in den letzten Tagen eine "_MsgBox"-Funktion als einzelnes Modul entwickelt. Die läuft auch super ... mit Sound und Grafik und großer Schrift (Die Anwender stehen nicht direkt am PC)...
_MsgBox im Modul
C
Alles anzeigen; ; ; MsgBox - De Rand Ere ; ; ; #include-once #include <Sound.au3> #include <ButtonConstants.au3> #include <ColorConstants.au3> #include <FontConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <WinAPIHObj.au3> Global $aSounds[5], $vEAN = "1234567891234567", $vName = "Schulzendorf" Global $idMsgOk, $idMsgBeenden $aSounds[0] = _SoundOpen(@ScriptDir&"\atx\Sound_Button.mp3") ; Button $aSounds[1] = _SoundOpen(@ScriptDir&"\atx\Sound_Fehler.mp3") ;Fehler $aSounds[2] = _SoundOpen(@ScriptDir&"\atx\Sound_Frage.mp3") ; weiter $aSounds[3] = _SoundOpen(@ScriptDir&"\atx\Sound_Info.mp3") ; Ifo global $idBeenden, $tZeit, $idVerstande $vWert = _msgBox("Frage",_msg_Bild(4),_Msg_UETxt(2),_Msg_TxT(2),_Msg_OK(2),_Msg_No(2),_msg_Sound("Frage")) ;ID: 1= Fehler, 2 = Frage, 3 = Info ;Bild: 1= Fehler, 2 = Frage, 3 = Info, 4 = Exit ConsoleWrite("EndeWert: "&$vWert&@LF) ; ----------------------------------------------------------------------------------------- Func _msgBox($ID,$vPic,$vUETxt,$vMsgTxt,$Ok_Txt,$No_Txt,$vSound) $tZeit = TimerInit() $hMsgBox = GUICreate("",800,340,-1,-1,$WS_POPUPWINDOW,$WS_EX_CLIENTEDGE+$WS_EX_DLGMODALFRAME) Switch $ID Case "Fehler" ; Fehler GUICtrlCreateGraphic(0,13,800,55) GUICtrlSetBkColor(-1,0xff0000) GUICtrlCreateLabel("Fehler:",20, 20, 110, 38) ; Kategorie GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0xff0000) GUICtrlCreateLabel($vUETxt,130, 20, 650, 38,$SS_CENTER) ; Bereich GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0xff0000) _SoundPlay($vSound) Case "Frage" ; Frage GUICtrlCreateGraphic(0,13,800,55) GUICtrlSetBkColor(-1,0x069395) GUICtrlCreateLabel("Frage:",20, 20, 110, 38) ; Kategorie GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0x069395) GUICtrlCreateLabel($vUETxt,130, 20, 650, 38,$SS_CENTER) ; Bereich GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0x069395) _SoundPlay($vSound) Case "Info" ; Info GUICtrlCreateGraphic(0,13,800,55) GUICtrlSetBkColor(-1,0x10EB0B) GUICtrlCreateLabel("Information:",20, 20, 190, 38) ; Kategorie GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetBkColor(-1,0x10EB0B) GUICtrlCreateLabel($vUETxt,215, 20, 585, 38,$SS_CENTER) ; Bereich GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetBkColor(-1,0x10EB0B) _SoundPlay($vSound) EndSwitch _GUICtrlPic_Create($vPic,20,120,120,120) ; Info Text Bereich GUICtrlCreateGraphic(150,90,617,170,$SS_ETCHEDFRAME) GUICtrlSetBkColor(-1,0xFFEE99) GUICtrlCreateLabel($vMsgTxt,170,110, 595,140) GUICtrlSetFont(-1,15, $FW_MEDIUM ,0) GUICtrlSetBkColor(-1,0xFFEE99) ; Fußzeile $idMsgBeenden = GUICtrlCreateButton($No_Txt, 30 , 290, 180, 40) GUICtrlSetFont(-1,10, $FW_MEDIUM ,0) $idMsgOk = GUICtrlCreateButton($Ok_Txt, 320 , 270, 450, 60) GUICtrlSetFont(-1,20, $FW_BOLD ,0) GUICtrlSetState(-1,$GUI_FOCUS) GUISetBkColor(0xFFCC01, $hMsgBox) ; Postgelb GUISetState(@SW_SHOW, $hMsgBox) while 1 Switch GUIGetMsg() Case $idMsgOk ;~ Return(1) ExitLoop Case $GUI_EVENT_CLOSE, $idMsgBeenden ;~ Return(7) ExitLoop EndSwitch If TimerDiff($tZeit) > 15000 And TimerDiff($tZeit) > 15500 Then _SoundPlay($vSound) $tZeit = TimerInit() EndIf WEnd EndFunc Func _Msg_UETxt($Nr) ; Überschrift der MsgBox Switch $Nr Case 1 $vTxt = "Zulauf Paket: Eingabe 'EAN'!" Case 2 $vTxt = "Programm beenden ?" Case 3 $vTxt = "Prüfung Paket-Rücksendung!" Case 4 $vTxt = "Zulauf Paket: Eingabe 'Name'!" Case 5 $vTxt = "Zulauf Paket: Eingabe 'Lagerfach'!" Case 6 $vTxt = "Zulauf Paket: Eingabe 'Lagerfach'!" Case 7 $vTxt = "Paketsuche ohne Erfolg!" Case 8 $vTxt = "Paketsuche ohne Erfolg!" Case 9 $vTxt = "Paketausgabe!" EndSwitch Return($vTxt) EndFunc Func _Msg_TxT($Nr) ; Text der MsgBox Switch $Nr Case 1 $vTxt = "Die Länge des EAN - Codes stimmt nicht! Es müssen 16 Ziffern sein!"&@LF&@LF $vTxt &= "Bitte überprüfe Deine Eingabe!" Case 2 $vTxt = "Soll das Programm beendet werden?"&@LF&@LF $vTxt &= "Die aktuellen Daten werden gespeichert." Case 3 $vTxt = "Der Lagerbestand würde auf fällige Rücksendungen überprüft!"&@LF&@LF $vTxt &= "Bitte kontrolliere den Drucker auf die Rücksendeliste!" Case 4 $vTxt = "Der Name des Paketempfängers ist nicht eingetragen!"&@LF&@LF $vTxt &= "Bitte prüfe Deine Eingabe" Case 5 $vTxt = "Die Anzahl der Ziffern zum Lagerfach ist nicht richtig!"&@LF&@LF $vTxt &= "Es müssen zwei Ziffern sein. Bitte prüfe Deine Eingabe" Case 6 $vTxt = "Das eingegebene Lagerfach ist nicht verfügbar!"&@LF&@LF $vTxt &= 'Siehe "Information zu den Lagerflächen" im Zulauffenster.'&@LF $vTxt &= 'Bitte prüfe Deine Eingabe.' Case 7 $vTxt = "Das Paket mit dem EAN - Code "&$vEAN&" ist nicht vorhanden!"&@LF&@LF $vTxt &= "Das Paket ist entweder noch nicht eingetroffen oder die Lagerzeit war überschritten." Case 8 $vTxt = "Das Paket mit dem Adressat "&$vName&" ist nicht vorhanden!"&@LF&@LF $vTxt &= "Das Paket ist entweder noch nicht eingetroffen oder die Lagerzeit war überschritten." Case 9 $vTxt = "Soll das Paket"&@LF EndSwitch Return($vTxt) EndFunc Func _Msg_Ok($Nr) Switch $Nr Case 1 $vTxt = "Zurück zum EAN-Code" Case 2 $vTxt = "OK - Programmende" Case 3 $vTxt = "OK und Zurück" Case 4 $vTxt = 'Zurück zur Eingabe "Name"' Case 5 $vTxt = 'Zurück zur Eingabe "Lagerfach"' Case 6 $vTxt = 'Zurück zur Eingabe "Lagerfach"' Case 7 $vTxt = 'Zurück zur Suche "EAN - Code"' Case 8 $vTxt = 'Zurück zur Suche "Name"' Case 9 $vTxt = 'Ja, Paket austragen' EndSwitch Return($vTxt) EndFunc Func _Msg_No($Nr) Switch $Nr Case 1 $vTxt = "Beenden (ESC)" Case 2 $vTxt = "Nein, zurück" EndSwitch Return($vTxt) EndFunc Func _msg_Bild($Nr) Switch $Nr Case 1 ; Fehler $vTxt = @ScriptDir&"\gfx\Achtung_1.png" Case 2 ; Frage $vTxt = @ScriptDir&"\gfx\Fragezeichen.png" Case 3 ; Info $vTxt = @ScriptDir&"\gfx\Info.png" Case 4 ; Exit $vTxt = @ScriptDir&"\gfx\Exit.png" EndSwitch Return($vTxt) EndFunc Func _msg_Sound($Nr) Switch $Nr Case "Fehler" ; Fehler $vTxT = $aSounds[1] Case "Frage" $vTxT = $aSounds[2] Case "Info" $vTxT = $aSounds[3] EndSwitch Return($vTxt) EndFunc ; #INTERNAL_USE_ONLY#================================================================================================= ; Name...........: _GUICtrlPic_Create ; Description ...: Creates a Picture control for the GUI ; Syntax ........: _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth, $iHeight, $iStyle = -1 , $iExStyle = -1) ; Parameters ....: $sFilename - Path of image file ; Author ........: UEZ ; Modified.......: Melba23, guinness, jpm ; Remarks .......: PNG image can be used. ; ==================================================================================================================== Func _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1) _GDIPlus_Startup() Local $idPic = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight, $iStyle, $iExStyle) Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename) If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hBitmap) If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_Resized = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized) _GDIPlus_GraphicsSetInterpolationMode($hBMP_Ctxt, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC) _GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap_Resized) Local $hPrevImage = GUICtrlSendMsg($idPic, $STM_SETIMAGE, 0, $hHBitmap) ; $STM_SETIMAGE = 0x0172 _WinAPI_DeleteObject($hPrevImage); Delete Prev image if any _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hBitmap_Resized) _GDIPlus_GraphicsDispose($hBMP_Ctxt) _WinAPI_DeleteObject($hHBitmap) _GDIPlus_Shutdown() Return $idPic EndFunc ;==>_GUICtrlPic_Create
So richtig toll ist das erst mir Grafik und Sound. Lade ich mit hoch als zip. Einfach in einem Unterverzeichnis dezipn ... Das ist die Rohfassung ohne Fehlerbearbeitung ... __MsgBox.zip
Nun war mein Plan die "_MsgBox" mit seinen Anhängen in mein Projekt zu übernehmen und Stück für Stück die "MsgBox"-Anweisungen umzustellen.
Alter Arsch - nix geht los
Ich will also das Hauptfenster "liegen lasse" und mein Msg-Fenster drüber legen. Das Msg-Fenster ohne Rahmen und Kopf. Zwei Button (Ja / Nein) ... und dann solls im Programm weitergehen ...
Ich hab das mal rausgezogen:
Spoiler anzeigen
C
Alles anzeigen#include-once #include <Array.au3> #include <ButtonConstants.au3> #include <ColorConstants.au3> #include <Date.au3> #include <EditConstants.au3> #include <File.au3> #include <FileConstants.au3> #include <FontConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiListViewEx.au3> #include <IE.au3> #include <ListViewColorsFonts.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <Sound.au3> #include <StringConstants.au3> #include <StaticConstants.au3> #include <WinAPIHObj.au3> #include <WinAPIIcons.au3> #include <WinAPIInternals.au3> #include <WinAPISysInternals.au3> #include <WinAPISysWin.au3> #include <WindowsConstants.au3> Global $hMsgBox, $idMsgNo, $idMsgOK, $vSound ; GUI für Systemmeldungen Global $tZeitmsg ;~ ---------- Definitionen - HauptFenster ----------------- $vGUIBreite = 1366 $vGUIHoehe = 700 $hGui = GUICreate("Paketverwaltung DHL-Filiale - Lagerung, Suche und Rücksendung",$vGUIBreite,$vGUIHoehe) $idBeenden = GUICtrlCreateButton("Beenden (ESC)", $vGUIBreite - 200 , $vGUIHoehe - 80, 180, 40) GUICtrlSetFont(-1,15, $FW_BOLD ,0) GUISetState(@SW_SHOW, $hGui) While 1 $aInfo = GUIGetMsg(1) Switch $aInfo[1] Case $hGui Switch $aInfo[0] Case $GUI_EVENT_CLOSE, $idBeenden ;~ $vAbfrage = MsgBox(289,"Progarmmende", "Program beenden?") $vAbfrage = _msgBox("Frage",_msg_Bild(4),_Msg_UETxt(2),_Msg_TxT(2),_Msg_OK(2),_Msg_No(2),_msg_Sound("Frage")) ConsoleWrite("Abfragewert: "&$vAbfrage&@LF) If $vAbfrage = 1 Then ExitLoop EndIf EndSwitch Case $hMsgBox Switch $aInfo[0] Case $idMsgNo ConsoleWrite("Button $idMsgBeenden"&@LF) Case $idMsgOk ConsoleWrite("Button MsgOK"&@LF) EndSwitch If TimerDiff($tZeitmsg) > 15000 And TimerDiff($tZeitmsg) > 15100 Then ; Wiederholt den Sound nach 15 sec bei Inaktivität (Keine Bestätigung) _SoundPlay($vSound) $tZeitmsg = TimerInit() EndIf EndSwitch WEnd ;------------------- Funktionen ----------------------------------------------------------------------------------- Func _msgBox($ID,$vPic,$vUETxt,$vMsgTxt,$Ok_Txt,$No_Txt,$vSound) $tZeitmsg = TimerInit() $hMsgBox = GUICreate("",800,340,-1,-1,$WS_POPUPWINDOW,$WS_EX_CLIENTEDGE+$WS_EX_DLGMODALFRAME) Switch $ID Case "Fehler" ; Fehler GUICtrlCreateGraphic(0,13,800,55) GUICtrlSetBkColor(-1,0xff0000) GUICtrlCreateLabel("Fehler:",20, 20, 110, 38) ; Kategorie GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0xff0000) GUICtrlCreateLabel($vUETxt,130, 20, 650, 38,$SS_CENTER) ; Bereich GUICtrlSetFont(-1,25, $FW_BOLD ,0) ;~ GUICtrlSetColor(-1,0x5d0643) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0xff0000) _SoundPlay($vSound) Case "Frage" ; Frage GUICtrlCreateGraphic(0,13,800,55) GUICtrlSetBkColor(-1,0x069395) GUICtrlCreateLabel("Frage:",20, 20, 110, 38) ; Kategorie GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0x069395) GUICtrlCreateLabel($vUETxt,130, 20, 650, 38,$SS_CENTER) ; Bereich GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetColor(-1,$COLOR_WHITE) GUICtrlSetBkColor(-1,0x069395) _SoundPlay($vSound) Case "Info" ; Info GUICtrlCreateGraphic(0,13,800,55) GUICtrlSetBkColor(-1,0x10EB0B) GUICtrlCreateLabel("Information:",20, 20, 190, 38) ; Kategorie GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetBkColor(-1,0x10EB0B) GUICtrlCreateLabel($vUETxt,215, 20, 585, 38,$SS_CENTER) ; Bereich GUICtrlSetFont(-1,25, $FW_BOLD ,0) GUICtrlSetBkColor(-1,0x10EB0B) _SoundPlay($vSound) EndSwitch _GUICtrlPic_Create($vPic,20,120,120,120) ; Info Text Bereich GUICtrlCreateGraphic(150,90,617,170,$SS_ETCHEDFRAME) GUICtrlSetBkColor(-1,0xFFEE99) GUICtrlCreateLabel($vMsgTxt,170,110, 595,140) GUICtrlSetFont(-1,15, $FW_MEDIUM ,0) GUICtrlSetBkColor(-1,0xFFEE99) ; Fußzeile $idMsgNo = GUICtrlCreateButton($No_Txt, 30 , 290, 180, 40) GUICtrlSetFont(-1,10, $FW_MEDIUM ,0) $idMsgOk = GUICtrlCreateButton($Ok_Txt, 320 , 270, 450, 60) GUICtrlSetFont(-1,20, $FW_BOLD ,0) GUICtrlSetState(-1,$GUI_FOCUS) GUISetBkColor(0xFFCC01, $hMsgBox) ; Postgelb EndFunc Func _Msg_UETxt($Nr) ; Überschrift der MsgBox Switch $Nr Case 1 $vTxt = "Zulauf Paket: Eingabe 'EAN'!" Case 2 $vTxt = "Programm beenden ?" Case 3 $vTxt = "Prüfung Paket-Rücksendung!" Case 4 $vTxt = "Zulauf Paket: Eingabe 'Name'!" Case 5 $vTxt = "Zulauf Paket: Eingabe 'Lagerfach'!" Case 6 $vTxt = "Zulauf Paket: Eingabe 'Lagerfach'!" Case 7 $vTxt = "Paketsuche ohne Erfolg!" Case 8 $vTxt = "Paketsuche ohne Erfolg!" Case 9 $vTxt = "Paketausgabe!" EndSwitch Return($vTxt) EndFunc Func _Msg_TxT($Nr) ; Text der MsgBox Switch $Nr Case 1 $vTxt = "Die Länge des EAN - Codes stimmt nicht! Es müssen 16 Ziffern sein!"&@LF&@LF $vTxt &= "Bitte überprüfe Deine Eingabe!" Case 2 $vTxt = "Soll das Programm beendet werden?"&@LF&@LF $vTxt &= "Die aktuellen Daten werden gespeichert." Case 3 $vTxt = "Der Lagerbestand würde auf fällige Rücksendungen überprüft!"&@LF&@LF $vTxt &= "Bitte kontrolliere den Drucker auf die Rücksendeliste!" Case 4 $vTxt = "Der Name des Paketempfängers ist nicht eingetragen!"&@LF&@LF $vTxt &= "Bitte prüfe Deine Eingabe" Case 5 $vTxt = "Die Anzahl der Ziffern zum Lagerfach ist nicht richtig!"&@LF&@LF $vTxt &= "Es müssen zwei Ziffern sein. Bitte prüfe Deine Eingabe" Case 6 $vTxt = "Das eingegebene Lagerfach ist nicht verfügbar!"&@LF&@LF $vTxt &= 'Siehe "Information zu den Lagerflächen" im Zulauffenster.'&@LF $vTxt &= 'Bitte prüfe Deine Eingabe.' Case 7 $vTxt = "Das Paket mit dem EAN - Code ist nicht vorhanden!"&@LF&@LF $vTxt &= "Das Paket ist entweder noch nicht eingetroffen oder die Lagerzeit war überschritten." Case 8 $vTxt = "Das Paket mit dem Adressat ist nicht vorhanden!"&@LF&@LF $vTxt &= "Das Paket ist entweder noch nicht eingetroffen oder die Lagerzeit war überschritten." Case 9 $vTxt = "Soll das Paket"&@LF $vTxt &= "EAN - Code: xyz"&@LF $vTxt &= "Name: Hans Irgenswas ausgetragen werden?" EndSwitch Return($vTxt) EndFunc Func _Msg_Ok($Nr) Switch $Nr Case 1 $vTxt = "Zurück zum EAN-Code" Case 2 $vTxt = "OK - Programmende" Case 3 $vTxt = "OK und Zurück" Case 4 $vTxt = 'Zurück zur Eingabe "Name"' Case 5 $vTxt = 'Zurück zur Eingabe "Lagerfach"' Case 6 $vTxt = 'Zurück zur Eingabe "Lagerfach"' Case 7 $vTxt = 'Zurück zur Suche "EAN - Code"' Case 8 $vTxt = 'Zurück zur Suche "Name"' Case 9 $vTxt = 'Ja, Paket austragen' EndSwitch Return($vTxt) EndFunc Func _Msg_No($Nr) Switch $Nr Case 1 $vTxt = "Beenden (ESC)" Case 2 $vTxt = "Nein, zurück" EndSwitch Return($vTxt) EndFunc Func _msg_Bild($Nr) Switch $Nr Case 1 ; Fehler $vTxt = @ScriptDir&"\gfx\Achtung_1.png" Case 2 ; Frage $vTxt = @ScriptDir&"\gfx\Fragezeichen.png" Case 3 ; Info $vTxt = @ScriptDir&"\gfx\Info.png" Case 4 ; Exit $vTxt = @ScriptDir&"\gfx\Exit.png" EndSwitch Return($vTxt) EndFunc Func _msg_Sound($Nr) Switch $Nr Case "Fehler" ; Fehler ;~ $vTxT = $aSounds[1] Case "Frage" ;~ $vTxT = $aSounds[2] Case "Info" ;~ $vTxT = $aSounds[3] EndSwitch ;~ Return($vTxt) EndFunc ; #INTERNAL_USE_ONLY#================================================================================================= ; Name...........: _GUICtrlPic_Create ; Description ...: Creates a Picture control for the GUI ; Syntax ........: _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth, $iHeight, $iStyle = -1 , $iExStyle = -1) ; Parameters ....: $sFilename - Path of image file ; Author ........: UEZ ; Modified.......: Melba23, guinness, jpm ; Remarks .......: PNG image can be used. ; ==================================================================================================================== Func _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1) _GDIPlus_Startup() Local $idPic = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight, $iStyle, $iExStyle) Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename) If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hBitmap) If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_Resized = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized) _GDIPlus_GraphicsSetInterpolationMode($hBMP_Ctxt, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC) _GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap_Resized) Local $hPrevImage = GUICtrlSendMsg($idPic, $STM_SETIMAGE, 0, $hHBitmap) ; $STM_SETIMAGE = 0x0172 _WinAPI_DeleteObject($hPrevImage); Delete Prev image if any _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hBitmap_Resized) _GDIPlus_GraphicsDispose($hBMP_Ctxt) _WinAPI_DeleteObject($hHBitmap) _GDIPlus_Shutdown() Return $idPic EndFunc ;==>_GUICtrlPic_Create
- GUI wird geöffnet und ENDE-Button erzeugt
- wenn ich "ENDE bzw ESC" drücke ... sollte das Fenster der "_MsgBox"-Funktion erscheinen und mich nach meiner Meinung fragen !!!
Ich sehe es nur kurz flacker und dann kann ich die Anwendung nur über die Taskleiste (... Exit) beenden
Die Console sagt das "§idMsgNo" ständig gedrückt wird ...
Ich denke die While-Wend-Struktur ist für 2 Fenster richtig aufgebaut...
In meinem Projekt hab ich noch mehr Fenster die über Button aufgerufen werden. Das funktionier ...
Warum die _MesgBox nicht -
Jaaaa ... das wars,
ich hatte das "On_Top" in der grafischen Benutzung verstanden. Das Control soll also immer oben sein .... Ohne diesem Eintrag läuft die Sache. Vielen Dank ... ich bin wieder ein Stück weiter gekommen, auch wenn der Weg noch weit ist, bis ich mit dem getippten zu frieden bin.
-
Hallo zusammen,
ich wünsche erst mal einen schönen Sonntag mit Garten, Sonne und einem erfrischendem GetränkManch einer bevorzugt ja vielleicht doch die kühleren Räume eines Hauses und liest das hier....
Ich schreibe also eine Anwendung, die ein Hauptfenster (immer dargestellt) hat und, wenn notwendig wird ein GUI (kleiner) drübergeblendet. Alles kein Ding, läuft auch. Bei den ersten Anwendungstest zeigte sich aber, daß die Sichtbarkeit der aktiven Felder schlecht ist. So hab ich nachgebessert ... und stolperte nun über dieses Problem:
Ich mache also ein "Eingabefenster" über dem Hauptfenster auf. Dieses hat mehrere Eingabefelder und Button. Das erste Eingabefeld ist im Focus und in der Version 1 (V1) TABen die Felder so durch, wie sie erzeugt wurden. So weit alles prima. Nun hab ich nach einigem Studieren im Forum einen roten Rahmen um (genauer hinter) das aktive Feld gelegt. Auswertung und Änderung über $WM_COMMAND. Das funktioniert auch alles. Die notwendigen Zeilen hab ich in der entsprechenden Sektion den Control's zugeordnet. Immer bevor das eigentliche Eingabefeld erzeugt wird. Das hat nicht gereicht, so daß ich dem Eingabefeld den Status "OnTOP" zugeordnet habe. Das "DurchTABn" der roten Rahmen funktioniert super, nur die TAB-Reihenfolge hat sich total geändert.Ich habe also nur ein paar Zeilen dazu geschrieben und allles ist anders ...
Hier die Version V1 ohne Rahmen:
Spoiler anzeigen
#include-once
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <FontConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <IE.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <StringConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIHObj.au3>
#include <WinAPIIcons.au3>
#include <WinAPIInternals.au3>
#include <WinAPISysInternals.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Global $idZulaufNameWert ; Rückgabewert Zulauf Name
Global $idZulaufEANWert ; Rückgabewert Zulauf EAN
Global $idZulaufFachWert ; Rückgabewert Zulauf Lagerfach
Global $idZulauflfdNrWert ; Rückgabewert Zulauf LfdNr
Global $idReedRahmen_23 ; roter Rahmen ZulaufName
Global $idReedRahmen_24 ; roter Rahmen ZulaufEAN
Global $idReedRahmen_25 ; roter Rahmen ZulaufLagerfach
; ---- Main ----------------
$hGuiZulaufPakete = GUICreate("Zulauf Pakete:",550,430)
; ---------- Name
$idZulaufName = GUICtrlCreateLabel("Name: ",70,20,100,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulaufNameWert = GUICtrlCreateInput("",180,20,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; --------- EAN-Code
$idZulaufEAN = GUICtrlCreateLabel("EAN-Code: ",20,60,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulaufEANWert = GUICtrlCreateInput("",180,60,250,35,$ES_NUMBER)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; --------- lfdNr - Info
$idZulauflfdNr = GUICtrlCreateLabel("lfd Nr.: ",20,100,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulauflfdNrWert = GUICtrlCreateLabel("Info",180,100,50,35,$SS_CENTER)
GUICtrlSetColor($idZulauflfdNrWert, 0xC91E0C)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlCreateLabel("( wichtige ! )",230,100,300,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetColor(-1, 0xC91E0C)
; --------- Fach
$idZulaufFach = GUICtrlCreateLabel("Lagerfach: ",20,140,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulaufFachWert = GUICtrlCreateInput("",180,140,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; ----------------- Fußzeile
$hGuiZulaufPaketeEintragen = GUICtrlCreateButton("Aktion ausführen", 180 , 180, 350, 60)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$hGuiZulaufPaketeESC = GUICtrlCreateButton("Beenden (ESC)", 20 , 203, 140, 35)
GUISetBkColor(0xFFCC01, $hGuiZulaufPakete) ; Postgelb
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
GUISetBkColor(0xFFCC01, $hGuiZulaufPakete) ; Postgelb
; ------------------ Info zu Lagerfächern
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
; ----------------- Fußzeile
GUISetState(@SW_SHOW, $hGuiZulaufPakete)
$cSchalter = 0
while $cSchalter = 0
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hGuiZulaufPaketeESC
$cSchalter = 1
Exit
EndSwitch
WEnd
und hir die Version V2 mit den roten Rahmen:
Spoiler anzeigen
#include-once
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <FontConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <IE.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <StringConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIHObj.au3>
#include <WinAPIIcons.au3>
#include <WinAPIInternals.au3>
#include <WinAPISysInternals.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Global $idZulaufNameWert ; Rückgabewert Zulauf Name
Global $idZulaufEANWert ; Rückgabewert Zulauf EAN
Global $idZulaufFachWert ; Rückgabewert Zulauf Lagerfach
Global $idZulauflfdNrWert ; Rückgabewert Zulauf LfdNr
Global $idReedRahmen_23 ; roter Rahmen ZulaufName
Global $idReedRahmen_24 ; roter Rahmen ZulaufEAN
Global $idReedRahmen_25 ; roter Rahmen ZulaufLagerfach
; ---- Main ----------------
$hGuiZulaufPakete = GUICreate("Zulauf Pakete:",550,430)
; ---------- Name
$idZulaufName = GUICtrlCreateLabel("Name: ",70,20,100,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; Rahmen
$idReedRahmen_23 = GUICtrlCreateGraphic(178,18,256,40)
GUICtrlSetBkColor($idReedRahmen_23,$COLOR_RED)
;~ GUICtrlSetState($idReedRahmen_23, $GUI_HIDE)
$idZulaufNameWert = GUICtrlCreateInput("",180,20,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP+$GUI_FOCUS)
; --------- EAN-Code
$idZulaufEAN = GUICtrlCreateLabel("EAN-Code: ",20,60,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; Rahmen
$idReedRahmen_24 = GUICtrlCreateGraphic(178,58,256,40)
GUICtrlSetBkColor($idReedRahmen_24,$COLOR_RED)
GUICtrlSetState($idReedRahmen_24, $GUI_HIDE)
$idZulaufEANWert = GUICtrlCreateInput("",180,60,250,35,$ES_NUMBER)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP)
; --------- lfdNr - Info
$idZulauflfdNr = GUICtrlCreateLabel("lfd Nr.: ",20,100,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulauflfdNrWert = GUICtrlCreateLabel("Info - Bereich",180,100,50,35,$SS_CENTER)
GUICtrlSetColor($idZulauflfdNrWert, 0xC91E0C)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlCreateLabel("( wichtige ! )",230,100,300,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetColor(-1, 0xC91E0C)
; --------- Fach
$idZulaufFach = GUICtrlCreateLabel("Lagerfach: ",20,140,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
;Rahmen
$idReedRahmen_25 = GUICtrlCreateGraphic(178,138,256,40)
GUICtrlSetBkColor($idReedRahmen_25,$COLOR_RED)
GUICtrlSetState($idReedRahmen_25, $GUI_HIDE)
$idZulaufFachWert = GUICtrlCreateInput("",180,140,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP)
; ----------------- Fußzeile
$hGuiZulaufPaketeEintragen = GUICtrlCreateButton("Aktion ausführen", 180 , 180, 350, 60)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP)
$hGuiZulaufPaketeESC = GUICtrlCreateButton("Beenden (ESC)", 20 , 203, 140, 35)
GUICtrlSetState(-1,$GUI_ONTOP)
GUISetBkColor(0xFFCC01, $hGuiZulaufPakete) ; Postgelb
; ------------------ Info zu Lagerfächern
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
; ----------------- Fußzeile
GUISetState(@SW_SHOW, $hGuiZulaufPakete)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
$cSchalter = 0
while $cSchalter = 0
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hGuiZulaufPaketeESC
$cSchalter = 1
Exit
EndSwitch
WEnd
Func _Set_ReedRahmen($ControlID)
ConsoleWrite("SET Rahmen startet"&@lf)
Switch $ControlID
Case $idZulaufNameWert
GUICtrlSetState($idReedRahmen_23, $GUI_SHOW)
GUICtrlSetState($idReedRahmen_24, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_25, $GUI_HIDE)
Case $idZulaufEANWert
GUICtrlSetState($idReedRahmen_23, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_24, $GUI_SHOW)
GUICtrlSetState($idReedRahmen_25, $GUI_HIDE)
Case $idZulaufFachWert
GUICtrlSetState($idReedRahmen_23, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_24, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_25, $GUI_SHOW)
EndSwitch
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Switch _WinAPI_LoWord($wParam) ;ControlId
Case $idZulaufNameWert
If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then
_Set_ReedRahmen($idZulaufNameWert)
EndIf
Case $idZulaufEANWert
If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then
_Set_ReedRahmen($idZulaufEANWert)
EndIf
Case $idZulaufFachWert
If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then
_Set_ReedRahmen($idZulaufFachWert)
EndIf
EndSwitch
EndFunc
Beide sollten laufen ... ich hab mir aber nicht die Mühe gemacht die "#include" auszusortieren.
Warum ändert sich die TAB-Folge nach diesen paar zusätzlichen Zeilen. Der Status der Erzeugung der Controls bleibt doch der selbe ??? Oder hab ich da wieder ein Verdreher im Hirn
... und ja die "GUISetAccelerators" hab ich gelesen.
Dennoch verstehe ich das unterschiedliche Verhalten nicht. Wo ist da der springende Punkt
Schon mal vielen Dank
-
Oscar Geil, sowas von geil ... das freut mich echt. Will noch mal schauen, was Du verändert hast um halbwegs zu verstehen, wie das geht. _GDIPlus ist nicht so meine Welt. Da muß ich mich immer erst neu reindenken.
Nu hab ich den Kanal aber erstmal voll und geh in den Garten ... "eh bissl rumwürschn" und eh Bier trinken.
Gehabt Euch wohl ... -
alpines Danke für den Hinweis - wußte ich nicht. Wollte der höflichen Form nachkommen
-
@Oscar: Ja, danke noch mal für diese Funktion. Die Code-Länge sah hier im Forum wesentlich größer aus als er sich im SciTE darstellt. Und da ich mehrere Button verwende relativiert sich das wieder. Was mich zum nächsten Punkt bring. Bei einem weiteren Button benutze ich einen mehrzeiligen Text ('Paket"&@CR&@CR&"&Ausgabe').
Die Funktion "_GDIPlus_GraphicsDrawStringEx" setzt diesen String in eine Grafik um, kann aber nicht mit Steuerbefehlen umgehen.
Hier zur Ansicht:C
Alles anzeigen#include <ButtonConstants.au3> #include <FontConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <SendMessage.au3> #include <WinAPIHObj.au3> #include <WinAPIIcons.au3> #include <WinAPIInternals.au3> #include <WinAPISysInternals.au3> Global $hGui = GUICreate("Lable über Button", 500, 400) GUISetBkColor(0xFFCC01, $hGui) ; gelb ;~ Global $idZulauf = GUICtrlCreateButton('', 250, 150, 220, 100) ;~ _ButtonSetText(-1, 'Zulauf', '"Alt + z"', 'Arial', 40, 10) $idSucheAusgabe1 = GUICtrlCreateButton("Paket"&@CR&@CR&"&Ausgabe", 50 , 150, 183, 215,$BS_MULTILINE) ;~ _ButtonSetText(-1, 'Paket"&@CR&@CR&"&Ausgabe', '"Alt + a"', 'Arial', 40, 10) GUICtrlSetFont(-1,30, $FW_BOLD ,0) $idSucheAusgabe2 = GUICtrlCreateButton("Paket"&@CR&@CR&"&Ausgabe", 250 , 150, 183, 215,$BS_MULTILINE) _ButtonSetText(-1, 'Paket"&@CR&@CR&"&Ausgabe', 'HotKey: Alt + a', 'Arial', 40, 10) GUISetState(@SW_SHOW, $hGui) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd Func _ButtonSetText($idCtrl, $sText1, $sText2, $sFontname, $iFontsize1, $iFontsize2) Local $hCtrl, $hParent, $iW, $iH, $hBitmap, $hGraphic, $hBrush, $hFamily, $hFont, $hFormat, $tLayout, $hBMP, $hPrevImage _GDIPlus_Startup() If $idCtrl = Default Or $idCtrl <= 0 Then $idCtrl = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($idCtrl)) $hCtrl = GUICtrlGetHandle($idCtrl) ; das Handle vom Controlelement holen If Not $hCtrl Then Return SetError(1, 0, False) If Not BitAND(_WinAPI_GetWindowLong($hCtrl, $GWL_STYLE), $BS_BITMAP) Then GUICtrlSetStyle($idCtrl, $BS_BITMAP) $iW = _WinAPI_GetWindowWidth($hCtrl) $iH = _WinAPI_GetWindowHeight($hCtrl) $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) ; Eine Bitmap erstellen $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Graphic-Context der Bitmap holen _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 4) ; Textrendering festlegen $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) ; Farbe festlegen (ARGB) $hFamily = _GDIPlus_FontFamilyCreate($sFontname) ; Schriftart festlegen $hFont = _GDIPlus_FontCreate($hFamily, $iFontsize1, 0) ; Schriftgroesse und -stil fuer Text1 festlegen $hFormat = _GDIPlus_StringFormatCreate() _GDIPlus_StringFormatSetAlign($hFormat, 1) ; horizontal zentrieren _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ; vertikal zentrieren $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH) ; Rechteck fuer Text1 _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText1, $hFont, $tLayout, $hFormat, $hBrush) _GDIPlus_FontDispose($hFont) $hFont = _GDIPlus_FontCreate($hFamily, $iFontsize2, 0) ; Schriftgroesse und -stil fuer Text2 festlegen _GDIPlus_StringFormatSetAlign($hFormat, 2) ; rechts ausrichten $tLayout = _GDIPlus_RectFCreate(0, 4, $iW - 20, $iFontsize2 * 2) ; Rechteck fuer Text2 _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText2, $hFont, $tLayout, $hFormat, $hBrush) $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) $hPrevImage = _SendMessage($hCtrl, $BM_SETIMAGE, $IMAGE_BITMAP, $hBMP) If $hPrevImage Then If Not _WinAPI_DeleteObject($hPrevImage) Then _WinAPI_DestroyIcon($hPrevImage) EndIf _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_Shutdown() EndFunc
Es werden also die Steuerbefehle mit dargestellt. Die Funktion "_GDIPlus_GraphicsDrawStringEx" bringt keine weiteren Möglichkeiten der Textmanipulation mit sich. Bliebe also die Variante für den Button-Text (mehrzeilig) zwei bzw. mehrere "Grafiktexte" zu erstellen und entsprechen anzuordnen. Oder hast Du/Ihr noch ne andere Idee?
Vorab vielen Dank und einen schönen sonnigen Sonntag
-
@chesstiger: Danke für die schnelle Antwort ... mitten in der Nacht .... Hab ich heute früh gelesen und mußte erst mal herzhaft lachen. Mit war schon aufgefallen das die zwei Funktionen (GUICtrlSetBkColor und GUISetBkColor) mit ihren Parameter unterschiedlich aufgebaut sind. Find ich ja komisch aber es war nun mal der Wille des Schöpfers. ... und deshalb hab ich hier ca. 2h rumgemährt und noch nen Thema im Forum aufgemacht.
Hab's korrigiert und siehe da es funst nicht so wie gedacht, da das Lable beim Überfahren des Button verschwindet und nicht mehr wieder kommt. Somit ist der Beitrag von @Oscar natürlich berechtigt. Danke @Oscar Das schau ich mir genauer an. Wobei der Code-Aufwand für diese paar Buchstaben gigantisch ist. Dennoch vielen Dank.
-
Hallo zusammen,
ich hab den halben Tag "gebastelt" - leider ohne Erfolg!!
Ich habe ein GUI die ich in einem tollen GELB als "Bk" einfärbe. Darauf lege ich "riesiege" Button. Auch alles noch gut. Da die Kennzeichnung des Hotkey (&Zulauf) doch sehr sparsam ausfällt will ich in meinem "RiesenButton" den Hotkey einfach oben rechts mit einblenden. Ich habe als die Create-Befehle "gestapelt". Das funzt auch alles - nur die Farbe stimmt nicht.
Ich hab das mal ausgeklinkt:
Spoiler anzeigen
#include-once
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; -----------------------------------------------------------------------
$hGui = GUICreate("Lable über Button", 500, 400)
GUISetBkColor(0xFFCC01, $hGui) ; gelb
$idZulauf = GUICtrlCreateButton("Zulauf", 250, 150, 220, 100)
GUICtrlSetFont($idZulauf, 40, $FW_BOLD, 0)
$vText = "Es gibt:"&@LF&@LF&"GUISetBkColor - Hintergrundfarbe GUI - genutzt"&@LF&@LF&"GUICtrlSetBkColor - Hintergrundfarbe Contol - genutzt"
GUICtrlCreateLabel($vText,10,20,380,100)
GUICtrlSetFont(-1, 10, $FW_BOLD, 0)
;~ GUICtrlCreateGroup(" HotKey ", 395, 155, 60, 20)
;~ GUIctrlSetBKColor(0xF0F0F0,-1)
$hHKInfo = GUICtrlCreateLabel('"Alt + z"', 400, 160, 50, 15, Default, $WS_EX_TRANSPARENT)
GUICtrlSetFont(-1, 10)
GUICtrlSetBkColor(0xF0F0F0, -1)
;~ GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
GUICtrlCreateLabel("Warum scheint das GELB durch?",10,260,380,40)
GUICtrlSetFont(-1, 10, $FW_BOLD, 0)
GUICtrlCreateLabel("Auch wenn ich eine 'Gruppe' dahinterlege (hier als Komentar) ändert sich an dem GELB nix",10,300,480,40)
GUICtrlSetFont(-1, 10, $FW_BOLD, 0)
GUICtrlCreateLabel("Wo ist der Fehler ???? (:-(((",10,350,380,40)
GUICtrlSetFont(-1, 20, $FW_BOLD, 0)
GUISetState(@SW_SHOW, $hGui)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
; Ende
Wo ist der Fehler? Warum scheint GELB durch???
Hab ihr eine Idee ?
Vorab schon mal Danke
-
-
-
Ich danke Euch ....
Über den "TimerInit" ohne Klammern bin ich schon oft gestolpert .
SciTE gibt dazu bei mir keine Syntax - Fehlermeldung aus .... (auch nach jetzigem Update nicht)
Den nonce-Counter anders zu definieren ist nicht das Ding, werd ich machen)de.wikipedia.org/wiki/URL-Encoding
Das zieh ich mir zu Gemühte ...
Wobei ich das bis jetzt nicht verstehe. Die erste Anweisung "Key" beinhaltet nur normal Zeichen. Dennoch ist das Return von _WinHttpAddRequestHeaders negativ, also fehlerhaft ...
Noch verrückter wird das, wenn ich die Zuweisung auf $vReturn weg lasse.
alt: $vReturn =_WinHttpAddRequestHeaders($hRequest,"&Key=" & $key )
neu: _WinHttpAddRequestHeaders($hRequest,"&Key=" & $key )
Dann hab ich ein errorlevel 1 also "DllCall failed" (laut Doku WinHttp)
Das kommt aber mit der Zuweisung auf $vReturn nicht ....