1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. De Rand Ere

Beiträge von De Rand Ere

  • Zugriff auf Array aus mehreren "Programm-Instanzen"

    • De Rand Ere
    • 10. März 2023 um 23:36

    ... ich habs verstanden...
    Besten Dank

  • Zugriff auf Array aus mehreren "Programm-Instanzen"

    • De Rand Ere
    • 10. März 2023 um 23:15

    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.

    Zitat

    1. 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.

    Zitat

    Wä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....

  • Zugriff auf Array aus mehreren "Programm-Instanzen"

    • De Rand Ere
    • 9. März 2023 um 00:40

    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 :klatschen:

  • Fehler bei mehrfacher PDF-Erstellung mittels PDFtoPrinter.exe

    • De Rand Ere
    • 10. Mai 2021 um 23:47

    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.

  • Fehler bei mehrfacher PDF-Erstellung mittels PDFtoPrinter.exe

    • De Rand Ere
    • 7. Mai 2021 um 12:29

    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
    #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
    Alles anzeigen

    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 ???

  • Fehler bei mehrfacher PDF-Erstellung mittels PDFtoPrinter.exe

    • De Rand Ere
    • 6. Mai 2021 um 22:44

    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:

    Warteschlange.jpg

    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...

    Dateien

    Warteschlange.jpg 157,86 kB – 0 Downloads
  • Problem mit ListView und $LVS_EX_CHECKBOXES

    • De Rand Ere
    • 21. August 2019 um 23:12

    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" :ironie: 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

  • Diskussion zu: FAQ SciTE Editor

    • De Rand Ere
    • 21. August 2019 um 20:38

    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:)

  • _MsgBox ins Projekt einbinden

    • De Rand Ere
    • 16. August 2019 um 15:33

    Vielen Dank für Deine Mühe BugFix ... :klatschen::thumbup:

  • _MsgBox ins Projekt einbinden

    • De Rand Ere
    • 15. August 2019 um 23:57

    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
    ;
    ;
    ;               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
    Alles anzeigen

    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
    #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
    Alles anzeigen

    - 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 ;(:?::?::?:

  • TAB-Reihenfolge ... schon x-mal diskutiert, dennoch eine Frage

    • De Rand Ere
    • 14. August 2019 um 00:14

    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.

  • TAB-Reihenfolge ... schon x-mal diskutiert, dennoch eine Frage

    • De Rand Ere
    • 11. August 2019 um 14:30

    Hallo zusammen,

    ich wünsche erst mal einen schönen Sonntag mit Garten, Sonne und einem erfrischendem Getränk8):)

    Manch 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 ...:huh:

    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

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • De Rand Ere
    • 4. August 2019 um 15:24

    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 ...

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • De Rand Ere
    • 4. August 2019 um 14:07

    alpines Danke für den Hinweis - wußte ich nicht. Wollte der höflichen Form nachkommen:)

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • De Rand Ere
    • 4. August 2019 um 13:56

    @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
    #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
    Alles anzeigen

    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:thumbup:

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • De Rand Ere
    • 3. August 2019 um 16:40

    @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.

  • "gestapelte" Controls - Problem bei der Bk-Farbgebung

    • De Rand Ere
    • 3. August 2019 um 01:32

    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:thumbup:

  • Login über Poloniex-API - wo muß ich das " "nonce" POST parameter " einsortieren

    • De Rand Ere
    • 16. Juni 2017 um 22:53
    Zitat von alpines

    $msgBox = MsgBox

    $msgBox(0, 0, 0)

    ... ich kann also einer Variable eine Funktion zuweisen und muß später der Variable nur die (muß)-Parameter übermitteln.
    DAS kannte ich noch nicht ... danke.

  • Login über Poloniex-API - wo muß ich das " "nonce" POST parameter " einsortieren

    • De Rand Ere
    • 16. Juni 2017 um 22:34

    Das hab ich in der WinHttp-Doku gelesen, daß man mehrere Sätze mit "@CRLF" verbinden kann.
    Hab ich auch schon getestet ... allerdings nicht mit ...SSLRequest .

    Erst mal DANKE... teste ich ...

  • Login über Poloniex-API - wo muß ich das " "nonce" POST parameter " einsortieren

    • De Rand Ere
    • 16. Juni 2017 um 21:57

    Ich danke Euch ....

    Über den "TimerInit" ohne Klammern bin ich schon oft gestolpert :(X(:( .
    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)

    Zitat von misterspeed

    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 .... :SX(:theke:


Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™