• Hallo,

    Seit WIN 10 sind ja auch die Emotji-Icons bei Windows mit an Bord. Die sind auch über

    einen speziellen Font (Segoe UI Emoji.ttf) installiert. Einfügen kann man sie im Browser

    oder einem RTF- Editfeld. Da ich diese Bildchen auch gerne in einer Imageliste haben

    möchte, habe ich die 520 passenden HTML-Codes in einen Bereich gepackt, um sie in

    einem HTMLWin anzuzeigen. Das klappt auch so ganz gut. Aber wie kopiere ich diese

    in einem Rutsch in eine MemoryBitmap ? So, wie unten im Programm zu sehen, wird

    immer nur der sichtbare Bereich des HTMLWin rein kopiert, je nachdem, wie man den

    horizontalen Scrollbalken des HTMLWin schiebt.

    Jetzt meine Frage :

    Wie kann man die gesamte Breite (nicht die sichtbare) mit CopyBmpToMem kopieren ?

    Immerhein ist die Breite ja 24.960 Pixel und nicht in einem Stück auf dem Bildschirm

    anzeigbar. Aus Performancegründen will ich jetzt nicht 520 mal ein einzelnes Bild ins

    HTMLWin zeichnen, immer Pos. 0, 0 und dann an die MemoryBmp dran kopieren,

    sondern das in einem Rutsch machen.

    Hat da jemand eine Idee ?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Du musst das HTMLWin so breit machen wie die Zeile mit den Emojis. Es kommt nicht darauf an, ob man das sehen kann, sondern nur, dass es existiert, ohne gescrollt werden zu müssen. Anders ausgedrückt: Der DC muss groß genug sein, auf den CopyBmpToMem lesend zugreift.

  • Es wäre sicher möglich, dass HTMLWin stückweise weiterzuscrollen aber ich fürchte, dass ist dein geringstes Problem. Die Emojis sind ja alle unterschiedlich breit, die wirst du kaum mit einer einfachen Rechnung ansteuern müssen. Mit GetTextExtentPoint32 müsste zuerst deren Breite ermittelt werden und ich würde sie definitiv einzeln verarbeiten.

  • Die Emojis sind ja alle unterschiedlich breit, die wirst du kaum mit einer einfachen Rechnung ansteuern müssen.

    Ja, ist mir am Freitag auch aufgefallen. Naja, ist ja auch ein Font. Das sieht man ja auch bei anderen Schriftarten.

    Da ist das W breiter als das z.b. I. Falsch gedacht habe ich bestimmt bei dem HTML-String

    Code
    font-size:48px\

    Da dachte ich, daß die Größe fest sei.

    Mit dem Tipp von Jens-Arne bin ich auch noch nicht so richtig weitergekommen.

    Da kommen mit

    Code
    breite = Len(z, ";") * 48 ' Anzahl der HTML-Codes * 48
    MCls breite, 80
    StartPaint browser
      CopyBmpToMem 0, 0 - breite, 80 > 0, 0
    EndPaint
    hpic = Create("hPic", 0, "&MEMBMP")

    bei den ersten 10 nur Fragmente und nachher nichts mehr. Die Imageliste zeigt aber mit GetCount() 520 Elemente an.

    Auch das hpic scheint irgendwie leer zu sein.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Was du vor hast ist insgesamt recht knifflig, vielleicht hilft ein ganz anderer Ansatz. Möchtest du eine Art "Emoji"-Tastatur bauen? Was auch immer, könntest du versuchen die Elemente direkt aus dem HTMLWin klickbar zu machen anstatt sie erst in ein Bild umzuwandeln. Normalerweise haben solche Browserobjekte auch Möglichkeit, Events wie Klicks zurückzugeben, leider ist hierfür in der XProfan Hilfe nichts dokumentiert. Ein Ansatz wären viele HTMLWins mit je einem Emoji drin und du fragst den Klick auf das ganze Element ab. Anhand der Mausposition könntest du auch den Klick eines von mehreren Elementen abfragen. Das Problem mit der unterschiedlichen Zeichenbreite könntest du durch fixe Wrapper, eine Tabelle oder Gridview lösen.

  • Eine Tastatur nicht. Die ist ja softwaremäßig schon in WINDOWS drin.

    Sowas ähnliches habe ich vor, daß man die Bildchen mit der Maus anfassen

    und auf einem Fenster (Static) per Drag&Drop positionieren kann.

    Bloß mit der ImageListe ist es halt leichter, Drag&Drop zu realisieren.

    Da gibt es ja auch genug Beispiele. Hatte schon mit den eingebauten

    Icons von XProfan sowas gemacht.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Hier mal ein kleines Beispiel, damit ihr seht, was ich meine :

    Da fehlt natürlich noch das Raster im RoundRect und das genaue Einrasten.
    Damit das Icon nur im Rahmen gezeichnet wird, habe ich Between() genommen.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Wie Zeitkritisch ist der Aufbau des Iconcaches?

    Ich habe darüber nachgedacht ob man nicht zuerst jedes Icon aufruft und dann an die Liste anfügt.

    Also alle 520 hintereinander weg.

    So ein Durchlauf dauert aber dann ein paar sekunden beim Programmstart.

  • Das war auch meine ursprüngliche Idee. Ich wollte mir nur kein großes Grafikprogramm installieren,

    das die Icons auch nebeneinander, so wie die Toolbar32.bmp, speichern kann. Da bietet sich auch

    so eine Speicherbitmap (MCLs, Create("hSizedPic",...) mit einstellbarer Größe an. In meinem obigen

    Beispiel ist es ja uninteressant, da die Icons schon fest in den Interpreter/Runtime integriert sind.

    Da glaube ich kaum, daß es da große Geschwindigkeitsunterschiede gibt. Immerhin muß ja die

    ImageList die Bildchen einer solchen Toolbar als Bmp auch bis auf die angegbenen Größen rauf-

    oder runterbrechen. Das einzig Langsame meiner obigen Methode ist die Schleife, was sich aber

    bei einer Anzahl von 21 Bildchen in Grenzen hält.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Ich dachte eher daran, die 500+ Icons einmalig zu Fuß einzulesen und in eine mit create("hNewPic",...) Bitmap zu legen, die man dann als BMP abspeichern kann (mit XProfan, nicht mit einem Grafikprogramm). Danach kann man diese BMP-Datei benutzen, um die Icons schnell wieder einzulesen. Das geht mit Sicherheit deutlich schneller, weil man ja nicht erst in einem RichEdit oder HTMLWin einzeln die Icons aus der Font anzeigen lassen muss.

  • Ja, wie die Toolbar bzw. Toolbar32, die in (X)Profan integriert ist. Kann man ja sehr leicht mit dem

    RessourceHacker in den Interpreter und Runtime integrieren. Dann braucht man auch keine extra

    Datei mitführen. Mit MCLs 520 * 32, 32 hätte man ja auch eine geeignete Zeichenfläche, wo alles

    hintereinander draufpaßt. Bloß hatte ich damals nicht an den Font Segoe UI Emoji.ttf gedacht. Da

    sind die Icons unterschiedlich in der Größe und somit hat er mir einen Strich durch die Rechnung

    gemacht. . Und wie bekomme ich z.b. durch simulierte Tastendrücke die Icons hintereinander irgendwo

    automatisch drauf ? Im Softwarekeyboard jedes einzelne Smielie doppleklicken und dann vom Clipboard

    ins RTF ist nun keine Option für mich. Das müßte ich ja dann 520 mal machen.

    Da die Icons ja auch als UNICODE verfügbar sind schwebt mir der Gedanke im Kopf ein Eidt-Control

    mit @Control(...) zu erzeugen. Meines Wissens gibt es die Controls ja in zwei Varianten, wie z. b. :

    MessageBoxA - Ansi-Version

    MessageBoxW - Unicode-Version

    Wenn es sowas auch für das einzeilige Editfeld gäbe/gibt, könnte man ja die Icons als langen String

    (Unicodezeichen hintereinander mit ; ) mit SetText ins Editfeld setzen. Wenn SetText nicht funktioniert,

    könnte man sich da vllt. mit einer API behelfen. Ist halt nur die Frage, wie man anschließend die Editzeile

    als Bitmap wieder rausbekommt.

    Vielleicht wäre es auch mit einem sehr breiten Static-Control machbar. Da könnte man mit

    Code
    StartPaint static
      CopyBmpToMem
    EndPaint

    die Bitmap als Speicherbitmap bekommen. Aber da muß man auch erst mal das Static mit den Icons

    bemalt bekommen.

    Scheint doch alles nicht so einfach zu sein.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

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

    Einmal editiert, zuletzt von SvenB (20. Oktober 2023 um 17:54)

  • Oh, vielen Dank, funktioniert.

    Hab jetzt die bei dir angehängte imagelist.png in MS Paint geöffnet und als .bmp gespeichert.

    Mit dem ResHacker dann im Interpreter und Runtime bei den anderen Toolbars gespeichert.

    Hiermal für die ersten 101 Icons :

    Die sind auch ratzfatz gezeichnet. Praktisch schon beim Fenster öffnen mit Window 800, 650 .

    Dachte, das braucht 1-2 Sekündchen.

    Danke nochmals.

    PS:

    Bei deinem obigen Bild bringst du mich auch auf eine Idee. Ob nun Smilies oder die schon integrierten Toolbars,

    ist es immer mühsam, die Nummer des Icons in der ImageListe heraus zu tüfteln. Da wäre eine Anzeige

    mit einem Programm im BenutzerMenü in der IDE sehr hilfreich. Da böte sich ja ein TreeView förmlich an.

    Das könnte als Baum die Toolbar, Toolbar32 und meine Smilies-Bar als Text anzeigen und beim Draufklicken bzw.

    Auswählen jeweils die laufende Nummer (nullbasiernd) und das jeweilige Bildchen dazu anzeigen. Hab sowas

    schon mal mit der Toolbar alleine gemacht, allerdings nur als reine Fensterausgabe. Aber mit den vielen

    Smilies paßt das da nicht mehr.

    Wäre auch gut für andere hier im Forum. Da setze ich mich mal demnächst dran.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    Einmal editiert, zuletzt von H.Brill (20. Oktober 2023 um 19:45)

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

  • Naja, Namen wird man wohl auch nicht viele im Gedächtnis behalten können

    und auch nicht das Bildchen dazu. OK, ein Grinz-Smilie, Traurig-Smilie o. ä.

    schon, halt die wichtigsten, was Gesichter anbetrifft. Aber aus der ganzen Masse

    heraus finde ich besser, wenn man das Smilie auch sieht, das man für den jeweiligen

    Verwendungszweck braucht und was es alles gibt. Ist aber trotzdem brauchbar, wenn

    ich jetzt genau weiß, daß ich z.b. ein Bild von einer Maus brauche. Das grenzt dann

    die Suche deutlich ein und man hat einen besseren Überblick.

    Insofern :top:

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Habe schon mal angefangen, wie ich mir so ein TreeView vorstelle. Ich hätte da aber ein paar Fragen dazu.

    Schade halt, daß xprofan.net auch ausgefallen ist. Sonst könnte ich zuerst dort suchen.

    Da RGH Funktionalitäten (z.b. openGL, dbase, json usw.) öfter nur rudimentär implementiert hat, stellt sich

    mir die Frage, ob man per API bei dem TreeView (TV) etwas nachhelfen kann. Mich stört z.b. daß man schon beim

    Erstellen des TV die Imagelist angeben muß. Da werden die Bildchen ja schon im Oberast angezeigt. Ich bräuchte sie

    ja erst bei den SubItems (Unterästen) und nicht im zentralen Baum. Gibt es da eine Möglichkeit / API diese nachträglich

    zuzuweisen ? Und ist es möglich, mit mehreren Imagelisten zu arbeiten ? Ich bräuchte ja für jede Toolbar (und meiner Smilies-Toolbar)

    eine extra Imageliste. Ich möchte gerne vermeiden, für jede Toolbar ein extra TreeView zu erstellen, somit man dann alles zentral

    zusammen hat.

    Vielleicht kennt sich ja jemand damit aus.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Ich hatte da was in den Untiefen meines USB-Sticks gefunden (siehe Datei-Anhang) :

    Aber wie ich da eine neue ImageList mit

    TreeView("SetOverlayImage", tv, Header, tblist1)

    einsetze weiß ich nicht.

    Dateien

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Also, wie es ausschaut geht das nicht.

    Ich habe jetzt im Netz mehrmals gelesen, daß das Standard - Treeview entweder nur

    eine oder halt keine ImageList haben kann. Und RGH hat ja mit Sicherheit das Standard

    Treeview und kein owner drawed Treeview genommen.

    Also bleibt mir nichts anderes übrig, als für jede Toolbar ein eigenes Treeview mit der dazugehörigen

    ImageList zu machen.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Ich konnte es jetzt auf 2 Treeviews eingrenzen.

    In der ersten werden die Resourcen (Bitmap, wo die Toolbars gespeichert sind)

    ausgelesen und je nach Klick darauf erscheint ein zweites TreeView, das dann

    die Icons der jeweiligen Toolbar anzeigt. Die Größen der Icons ermittele ich durch

    Create("hPic",...) und der gesetzten Systemvariablen %BmpY. Diese ist dann auch

    maßgebend für die Größe der ImageListe. Nun ist was kleines, feines rausgekommen.

    Kann man auch schön ins Benutzermenü machen. Dann hat man es immer zur Hand.

    Probiert es mal aus (ab X3 wegen AddRes).

    Verbesserungen sind auch willkommen. Vielleicht habe ich auch noch einen Fehler drin, der erst

    später bemerkt wird.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    Einmal editiert, zuletzt von H.Brill (22. Oktober 2023 um 18:22)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!