[asm] Steuerelemente

Hi,

Die meisten von euch kennen bestimmt Programme wie "ICQ" oder "Trilian", die in einer Art von RichEdit Feld z.B. Smilies oder Links(die außer Websites auch noch Funktionen aufrufen können) anzeigen können.

So bis jetzt kannte ich in asm nur diese Standartsteuerelemente, aber solangsam werden mir diese Standartsachen zu langweilig und ich möchte sowas mit Bilder in einem RichEdit Feld machen können.

Ich entsinne mich im BuhaBoard einen Beitrag von CDW gesehen zu haben, indem ein Vorschlag eines COM-Objects zu benutzen gemacht wurde, dass z.B. HTML interpretieren kann.
Nur leider wurde nicht näher drauf eingegangen, deswegen frag ich mal hier.

1. Was hats mit diesem COM auf sich bzw. wie benutzt mans?
2. Kennt jemand andere Möglichkeiten z.b. Bilder im Richeditfeld umzusetzen.

gruß
 
Naja also gaaanz genau kenn ich auch nicht alle Details, für aufgeborte Boxen würde ich deise immer selber schreiben (Paint Routinen für eigenens Aussehen).

Windows hat ja die Standart WinAPI, Funktionen die über DLLs nach außen gegeben werden. Da aber eigentlich heutzutage Objekt Orientierte Programmierung angesagt ist, DLLs und der Windows Aufbau aufgrund ihres Alters einige Hürden aufstellen, kann man nicht "einfach so" mit Objekten arbeiten. Normalerweise baut man ja "Wrapper" also Hüll-Klassen, die nach außen hin OOP sind aber intern nur normale Funktionsaufrufe absetzen. Per Windows Component Object Model, gibt es nun einen zentralen Platz, an der Objekte eines bestimmten Formats liegen können und von den verschiedenen Programmen eingebunden werden können (ohne das deren Coder sie selbst neu entwickeln müssten). Da hat der Komponentennutzer also fein OOP in externen Komponenten und Windows hat schon einiges davon an Bort, z.B. die Common Controls oder ebend den Internet Explorer, dessen HTML engine man dann selbst einbinden kann. Wo genau die Abgrenzung zu ActiveX ist, weiß ich nicht genau, intern sind das natürlich auch nur ganz gewöhnliche API Calls.

Zu (D)COM gibt es massig Bücher aber ich finde COM nicht so toll, da mann immer dafür sorgen muss, dass die Komponenten auch beim Endanwender vorhanden sind. Ein Grund wieso ich vor Jahren von VB weg bin ;-)
 
Kennst du den evtl. noch andere Möglichkeiten wie ich mein Vorhaben ohne COM durchsetzen könnte?
Oder ist das die einzige Möglichkeit?

gruß
 
mehr als das (Subclassing) fällt mir nicht ein:
http://win32assembly.online.fr/tut32.html
wobei das relativ nah an der Problemstellung ist: in diesem Beispiel wird Syntaxhighlithning realisiert, in dem "matched" Text per DrawText überschrieben wird (dafür müssen schließlcih auch koordinaten usw geholt werden). Ich kann mir vorstellen, dass man das ganze noch relativ gut zu Links umfunktionieren kann (zuerst linkerkennung per www., dann Koordinaten holen/speichern und später immer Curosposition mit dieser Liste überprüfen). Bei Bildern wird es ertwas komlizierter, weil man den Text ja "Auseinanderschieben" müsste - aber z.B die Smileys kann man ja direkt bei der Eingabe erkennen oder den Text danach "scannen" und jedes CRLF dann eben Verdoppeln/verdreifachen (je nach Bildgröße).
 
Genau also man rendert den Inhalt der Box komplett selber und fügt dann z.B. je nach TAG ein Bild, etc. ein. Das ganze wird allerdings haarig, wenn es mit scrollen usw. los geht.

Gibt es einen bestimmten Grund, wieso du dass per Win32+ASM achen willst und nicht mit einer höheren Programmiersprache?
 
Das ist natürlich ziemliche fiesle Arbeit.
Wenns so hart wird, muss ich mir evtl. irgentwas anderes ausdenken.
Und wegen höherer Programmiersprache:
Ist schon ziemlich länger her das ich mal was in C++ oder so gemacht habe, hab eigentlich momentan nur mit PHP und Winasm zu tun.

Aber wenn ich grad schonmal nen Thread offen haben kann ich gleich noch ne Frage loswerden. Wie macht mans am besten in Asm mit den "Buffergrößen"
z.b. beim "recv" ich könnte natürlich einen ziemlich hohe größe wählen, aber hat das irgentwelche auswirkungen auf die spätere Speicherauslastung des Programms, obwohl evtl. dieser "Buffer" nicht komplett genutzt wird.
 
Aber wenn ich grad schonmal nen Thread offen haben kann ich gleich noch ne Frage loswerden. Wie macht mans am besten in Asm mit den "Buffergrößen"
recv nimmt ja auch als Parameter die Bufferlänge entgegen und returnt im Erfolgsfall die Anzahl der geschriebenen Bytes. Ist der Buffer voll, kann man diesen ja verarbeiten und den Zeiger wieder an den Anfang setzen.
Das habe ich mal hier umgesetzt (GetHttpFile DLL)
 
Zurück
Oben