Beiträge von SvenB

    Dieses Magazin war mein Start in die Windows Programmierung. Aus Marketing-Sicht auch keine schlechte Sache, das aktuelle Profan 6 konnte man direkt auf der letzten Seite bestellen.

    Ein frohes neues Jahr zusammen! Ich fürchte so einfach ist es nicht, hier etwas per downloadfile zusammenzubauen. Ich versuche mal alles außer der Base64-Kodierung zu beleuchten.

    Downloadfile wird nur als sogenanntes "GET" funktionieren und ein Header lässt sich auch nicht in die URL integrieren. Es muss also wie gefordert ein POST mit entsprechendem Header verwendet werden. Ich habe dazu mal einen Code von mir modifiziert. Da ich keine Zugangsdaten habe, gibt er wie erwartet den HTTP Statuscode 401 (nicht autorisiert) zurück. Mit deinen base64 kodierten Zugansdaten dürfte es gehen allerdings geht aus deinem Beitrag noch nicht hervor wie dir eigentlichen Daten neben dem Header struktueirt sein sollen. Zum testen von APIs kann ich diese Seite sehr empfehlen: https://reqbin.com/
    Sobald die Abfrage dort gelingt, weiß man, was man zu programmieren hat.

    Hier der XProfan Code:

    Hallo Jens-Arne!

    Über die Suche findest du Folgendes in der Hilfe:
    "Diese Systemvariable enthält nach einem Klick auf ein untergeordnetes Fensterelement (Dialogelement) die entsprechende Messagenummer"

    Ich habe es mal ganz naiv ausprobiert:

    Code
    Cls
    Declare btn1&
    btn1& = Create("Button",%hwnd,"Test",0,0,100,30)
    While 1
        sleep 10  
        If %ChildMessage > 0
          locate 10,1
          Print str$(%ChildMessage) + "    "
        EndIf
    EndWhile

    Die Message kann hier zwischen Links, Mittel- und Rechtsklick unterscheiden (513, 519, 516 WM_...BUTTONDOWN), in Verbindung mit einem Waitinput hat es nicht mehr funktioniert. Da weder clicked() noch getfocus() bei Rechts und Mittelklick funktionieren wird es hier aber schwierig herauszufinden, welcher Button geklickt wurde ...

    Im Kontext von XProfEd fragt es einen Rechtsklick auf jedes beliebige Element ab, nicht aber %hwnd selbst.

    Mit den Datei-Funktionen habe ich letztens auch gekämpft. Bei mir war es das Problem, dass bei Rewrite durch weniger Daten als zuvor eben nicht (wie gewünscht und erwartet) der bisherige Dateiinhalt verloren ging sondern der Überhang übrig blieb, weshalb ich dann auch so Erase gewechselt bin.

    In deinem Fall scheint es Folgendes zu sein:
    Erase möchte nicht mit jedem Dateimodus (OpenRW?) zusammenarbeiten. Folgendes hilft:
    Schließe die Datei, wenn du mit Lesen oder schreiben fertig bist und lösche sie dann erst mit einem eigenen Assign:

    Code
     Assign #1, $ProgDir + "Mitarbeiter.dat"
     Erase #1
     Close #1

    Da ich bei mir irgendwie den Debugger nie zum Laufen bringe, arbeite ich normalerweise mit einer eigenen Konsolenausgabe oder in einfachen Fällen auch mal mit messageboxes als Breakpoints, so konnte man relativ schnell feststellen, dass die Datei zu keinem Zeitpunkt gelöscht wurde.

    Wie soll ich es nennen... ein Batchkonverter, ein Photoshop für Filter oder eine Spielwiese für Bildeffekte?
    In XProfan habe ich eine kleine Entwicklungsumgebung gebaut, mit der sich OpenGL Shader (GLSL) entwerfen und testen lassen. Die Grundidee war eigentlich, eigene Shader schneller entwerfen und testen zu können.

    Wie geht es?
    Der Shadercode bezieht sich immer genau auf einen Pixel und die Ausführung passiert parallel. Ich kann natürlich trotzdem umliegende Originalpixel auslesen. Vec2, vec3, vec4 bündeln jeweils mehrere Werte wie Bildkoordinaten, rgb oder rgba Farben, es gibt viele Hilfsfunktionen wie mix, clamp etc. Die Änderungen sind live beim Tippen sichtbar und können als Shader und das Ergebnis als Bilddatei abgespeichert werden.

    Es gibt auch die Möglichkeit des Konsolenaufrufs, um direkt Bilder zu konvertieren. Die Syntax bekommt man angezeigt sobald man es in der Eingabeaufforderung mit einem beliebigen Parameter öffnet.

    Den aktuellen Download werde ich immer hier speichern, aktuell ist EXE und Quellcode dabei.
    https://xprofan.net/intl/de/quellt…980&pg=-1#98980

    Viel Spaß beim Ausprobieren und gebt mir gerne Feedback!

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Ich habe mal ein wenig herumprobiert. Es sollte mit CreateCoreWebView2Environment losgehen aber das erwartet direkt als Parameter ein COM Objekt. Das wirst du in XProfan leider nicht zum Laufen bringen.

    Genau, das war C++. Deine Schreibweise für die Strings funktioniert.Ich habe die Shader-Skripte aber nun in Dateien ausgelagert.

    Ich lasse testweise Perlin-Noise generieren. Dafür hatte ich zuvor einen CPU-Code für XProfan, welcher mehrere Minuten pro Bild gebraucht hat, jetzt sind 1000 Bilder pro Sekunde möglich ebenso ziemlich jeder andere Bildeffekt wie Weichzeichnen, Schwarzweiß, Sättigung, Kontrast usw.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Danke für deine Antwort. Andere Pointer waren es nicht aber eine zusätzlicher am vorhandenen.

    Auf den ersten Blick sieht es gut aus, ich brauche einen Pointer auf einen Pointer bzw die Speicheradresse des Integers mit der Speicheradresse...

    statt:
    call(glShaderSource&, vertexShader&, 1, Addr(vertexShaderSource$),0)

    scheint es das zu sein:
    addr& = Addr(vertexShaderSource$)
    addrAddr& = Addr(addr&)
    call(glShaderSource&, vertexShader&, 1,addrAddr&,0)


    Es ist wohl unüblich einen Pointer auf einen String direkt zu verwenden... wieder etwas gelernt und mir ist nun auch klar, warum in der Definitionsbeschreibung zwei Sternchen vor dem Parameter waren.

    Das eof$ hatte ich nur verwendet, da ich es testweise mit $chr(10) und/oder $chr(13) befüllt hatte.

    Ich poste hier gerne weitere Fortschritte aber es wird noch ein längerer Weg :)

    Gerne möchte ich in XProfan Shader einsetzen für grafische Effekte aber auch für mathematische Berechnungen, welche dann parallel auf tausenden Kernen der Grafikkarte ausgeführt werden können.

    In C++ habe ich es hinbekommen, in XProfan versperrt sich eine Funktion aus mir unbekannten Gründen. Es ist üblich, dass ich OpenGL Funktionen, die nicht zum Basisumfang gehören per wglGetProcAddress verfügbar machen muss und diese dann mit call() ausführe. Ich denke nicht, dass wir hier ein 32/64 Bit Parameterproblem haben, dennoch stürzt der Aufruf immer ab, unter Verdacht immer der übergebene String bzw. die Adresse davon aber dort habe ich schon alles probiert... Ich bekomme glShaderSource nur ausgeführt, wenn ich ihm sage, dass er 0 Quelltexte verarbeiten soll (3. Parameter in Call, 2. der Funktion) oder absichtlich eine nicht existente Shader-ID übergebe (2. Parameter in Call, 1. der Funktion).

    Es sollten eigentlich keine OpenGL spezifischen Probleme sein, sobald OpenGL initialisiert ist sollte es klappen - oder selbst bei einem Fehler nicht abstürzen. Der Absturz deutet darauf hin, dass etwas mit den Parametern oder der Stringverarbeitung nicht klappt.

    Hallo,

    ich hoffe das Thema ist noch relevant! Genau ein Quad braucht es noch. Optional kann man per oGLW2H das Seitenverhältnis von OpenGL so wählen, dass eine Quadrat bildschirmfüllend wird und man sich nicht mehr um das Seitenverhältnis kümmern muss. Der Kameraabstand muss ausprobiert werden (Code 1) oder könnte per glOrtho durch Parallelperspektive erübrigt werden (Code 2).

    Option 1:
    Standardperspektive mit ausprobiertem Kameraabstand:


    Option 2:
    Orthogonale Ansicht passt immer aber die Hilfsfunktion für die Datentypumwandlung ist etwas sperrig:

    Du magst Recht haben. Ich hatte erwartet, dass jedes Mal ein neues Treeview erstellt wird und lediglich der Verweis im Handle auf das neue geändert wird aber das Alte scheint tatsächlich auch so zu verschwinden. Mit dem Aufräumen vor Programmende bin ich mir auch immer unsicher, ob es wirklich nötig ist ... das hPic zu löschen sobald es angewendet wurde ist aber gängige Praxis auch in der XProfan Hilfe.

    Das sieht doch gut aus. Ja. mehrere Imagelisten in einem Treeview wäre schwierig. Hier habe ich zwei Zeilen ergänzt, um alte hPics und Treeviews zu löschen, bevor neue angelegt werden. Wenn du ganz ordentlich bis, machst du vor Programmende noch ein DeleteObject tb

    Wenn man mal angefangen hat ... mit ein paar Handgriffen ist jetzt auch eine Suche möglich. Diese würde natürlich von weiteren versteckten Keywords profitieren, aktuell ist es nur der Emoji Name.

    Hier der Quelltext:
    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Das HTMLWin ist leider Schrott (zumindest unter Windows 10) und stürzt beim Ändern des HTML ab, ebenso beim häufigen Löschen und Neuerstellen. Ich verwende daher die atl.dll, die nutzt zwar genau den gleichen urlalten Internet Explorer aber es geht. Alles getestet im XProfan X4 Interpreter.

    Ich habe mit etwas CSS dafür gesorgt, dass sich jedes Emoji mittig in einem 48x48px Quadrat befindet. Die Schriftgröße 48px war dafür übrigens zu groß.

    Die Icons speichere ich in einem Sting, das finde ich handlicher als die LONG-Geschichte und trenne diese ebenso wie deren Bezeichnung per explode in Arrays.

    In einer Schleife mache ich folgendes:

    1. HTML mit nächstem Emoji drin generieren

    2. Browserobjekt mit dem neuen Icon füllen

    3. Etwas warten, bis wirklich alles aktualisiert ist und der Emoji angezeigt wird

    4. "Screenshot" des Browsers aber Zielkoordinaten im Speicher jedes mal eins aufrücken!

    Nach der Schleife dann das Bild speichern und eine Imagelist erstellen. Hier habe ich die Imagelist dann in einem Treeview verwendet. Bei der Toolbar war nach 99 Icons Schluss, das scheint ein Limit von Windows oder XProfan zu sein.

    Ja, es dauert lang und ist etwas wackelig (man sollte den Rechner am besten in Ruhe arbeiten lassen) aber es ist ja nur ein Hilfstool für den Entwickler, Ziel ist am Ende die Imagelist als BMP oder PNG zu haben und die funktioniert dann reibungslos. Diese ist übrigens mit meiner erweiterten Emoji Liste 54432x48 Pixel groß.

    Der Quelltext ist gekürzt auf 3 icons wegen des 10.000 Zeichen Limits des Forums.
    Hier komplett mit allen Emojis und fertiger Imagelist.png: Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Das ist die Imagelist als PNG: