ActiveX: Erweitertes CSS (transition, box-shadow usw.)

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

ActiveX: Erweitertes CSS (transition, box-shadow usw.)

01 Dec 2013, 11:17

Hallo,
ich habe mir eben ein schönes Design mit HTML/CSS gemacht, darin kommen unter Anderem auch transitions und box-shadow vor.

Ich habe mir das in Chrome angeschaut - funktioniert. Auch im Internet Explorer 11 (Windows 8.1) wird es einwandfrei dargestellt.
Wenn ich jetzt jedoch ein ActiveX-Element nutze (Gui, Add, ActiveX, ...), werden keine transitions und kein box-shadow dargestellt.

Gibt es also eine Möglichkeit, das auch als ActiveX richtig darzustellen?

Danke,
SAPlayer
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

02 Dec 2013, 08:16

SAPlayer wrote:Wenn ich jetzt jedoch ein ActiveX-Element nutze (Gui, Add, ActiveX, ...), werden keine transitions und kein box-shadow dargestellt.
In einem ActiveX wird offenbar nicht die auf dem System installierte IE-Version eingesetzt. Ich habe auch den IE 11 drauf, das ActiveX meldet aber den uralten IE 7 (von 2006), der natürlich vieles noch nicht kann.

Code: Select all

html =
(
<script type="text/javascript">
document.write(navigator.userAgent);
</script>
)
Gui, Add, ActiveX, w600 h300 vIE, HTMLFile
IE.write(html)
Gui, Show, w600 h300
return

GuiClose:
ExitApp
Transitions ginge vielleicht mit Hilfe von jQuery, mit dem man CSS-Styles animiert verändern kann: http://api.jquery.com/animate/
Bei box-shadow und neuerem CSS wirst du aber wahrscheinlich Pech haben.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

02 Dec 2013, 11:31

Danke für den Tipp. Dank ihm hab ich jetzt selber etwas gefunden: http://msdn.microsoft.com/en-us/library ... _emulation

Das heißt, wenn man den im Reg-Schlüssel HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION den DWORD-Wert AutoHotkey.exe mit dem Dezimal-Wert 11000 einträgt, wird unter AHK automatisch der IE 11 genutzt. Das funktioniert auch. Und anscheinend werden die jeweils niedrigeren Versionen genutzt, falls der IE 11 nicht installiert ist.
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

02 Dec 2013, 13:25

Wow, das ist ja mal 'ne Nachricht! Die mangelnden JS-Fähigkeiten haben mich schon viel Zeit gekostet, mit einem aktuellen IE wäre vieles einfacher. Bei mir funktioniert das ebenfalls, allerdings sehe ich gerade, dass dann ComObjConnect nicht mehr geht, was ja benötigt wird, um Events der Seite in AHK zu registrieren. Sehr schade.

Vielleicht kann man den Reg-Schlüssel ja auch dynamisch setzen. Das muss man alles mal austesten, aber eine interessante Entdeckung ist es auf jeden Fall.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

02 Dec 2013, 13:34

Du kannst mir gerne über deine Entdeckungen berichten ;)
Also bei mir funktioniert das mit dem ComObjConnect, ich nutze diesen Code:

Code: Select all

wb_BeforeNavigate2(wb, url, flags, frame, postdata, headers, cancel){ ;AHK-Installer //Lexikos
	;...
}
wb_NavigateError(wb, url, frame, status, cancel){ ;AHK-Installer //Lexikos
    wb_BeforeNavigate2(wb, url, 0, frame, "", "", cancel)
}

Gui, Add, ActiveX, x0 y0 w424 h300 v_MainGUI, Shell.Explorer
_mainGUI.Silent := 1
ComObjConnect(_mainGUI, "wb_")
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

02 Dec 2013, 15:28

SAPlayer wrote:Du kannst mir gerne über deine Entdeckungen berichten ;)
He, ich meinte die Entdeckung des Reg-Schlüssels ;)
SAPlayer wrote:Also bei mir funktioniert das mit dem ComObjConnect, ich nutze diesen Code:
Dann müsste es ja grundsätzlich gehen. Ich habe aber nicht Shell.Explorer, sondern HTMLFile:

Code: Select all

html =
(
<script type="text/javascript">
document.write(navigator.userAgent);
</script>
)
Gui Add, ActiveX, w600 h300 vIE, HTMLFile
IE.write(html)
ComObjConnect(IE, "IE_")    ; IE 11: Schnittstelle nicht unterstützt
Gui, Show, w600 h300
Return

GuiClose:
ExitApp
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

02 Dec 2013, 15:32

Ich meinte eigentlich, falls du auch noch weitere Entdeckungen machst ;)

Hast du es schonmal mit Shell.Explorer probiert?
Ich muss dazu sagen, ich nutze auch nicht direkt Shell.Explorer, sondern einfach direkt den Pfad zu meiner HTML Datei (z.B. C:\test.html).
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

03 Dec 2013, 06:04

SAPlayer wrote:Hast du es schonmal mit Shell.Explorer probiert?
Dein oben geposteter Code läuft hier ohne Fehlermeldung durch. Der Seiteninhalt wird bei mir aber meistens von AHK erzeugt, deshalb fände ich es schöner, wenn ich bei HTMLFile bleiben könnte und alles in einer Datei hätte. (Es ginge natürlich, eine temporäre Datei auf die Platte zu schreiben und anschließend mit Shell.Explorer wieder einzulesen).

Vielleicht ist der IE 11 aber auch nur zu restriktiv konfiguriert, dass er unterschiedliche Sicherheitszonen zugrundelegt oder im einen Fall ein Objekt gesperrt ist. Die Sicherheitseinstellungen des IE in Bezug auf ActiveX habe ich noch nie verstanden.

Ich werde das mal weiter untersuchen, wenn ich Zeit habe. Falls ich noch was finde, schreibe ich das hier rein.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

03 Dec 2013, 11:17

Auch das direkte Schreiben von HTML geht mit Shell.Explorer. Ich hab mir dazu eine Funktion gemacht:

Code: Select all

SetWB(wb, html){
	wb.Navigate("about:blank")
	html := RegExReplace(html, "`a)`n", "<br>")
	while(wb.ReadyState != 4){
		if(A_Index > 30){
			ToolTip("Ein Fehler ist aufgetreten", 1000)
			return -1
		}
		Sleep 10
	}
	wb.Document.open()
	wb.Document.write(html)
	wb.Document.Close()
}
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

03 Dec 2013, 16:14

Nächstes Problem, vielleicht weißt du (oder auch sonst jemand) ja weiter:
Ist es möglich, herauszufinden, auf welchen Button gedrückt wurde? Ich möchte nämlich herausfinden, ob der Button (es ist kein normaler Button, sondern a.button, also <a class="button">) die Klasse "disabled" hat.
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

03 Dec 2013, 19:11

SAPlayer wrote:Auch das direkte Schreiben von HTML geht mit Shell.Explorer. Ich hab mir dazu eine Funktion gemacht:
Gute Idee, doch mit der Expression fügst du am Ende jeder Zeile ein HTML-Element <br> ein, z.B. auch in CSS- oder Script-Bereichen, die dann nicht mehr funktionieren. Außerdem wird ein Zeilenumbruch im Quelltext nicht als Zeilenumbruch, sondern als Leerzeichen interpretiert (nicht immer, im Element <pre> bleibt es ein Zeilenumbruch). Wenn, dann würde ich Zeilenumbrüche als Leerzeichen ersetzen und auf <pre> verzichten.

Die Idee mit about:blank ist aber nicht schlecht, vielleicht kommt man mit dem Ansatz noch weiter.
SAPlayer wrote:Ist es möglich, herauszufinden, auf welchen Button gedrückt wurde? Ich möchte nämlich herausfinden, ob der Button (es ist kein normaler Button, sondern a.button, also <a class="button">) die Klasse "disabled" hat.
Wenn du wie oben ComObjConnect(..., "wb_") registriert hast, könnte es so gehen (ungetestet):

Code: Select all

wb_OnClick(document)
{
  element := document.parentWindow.event.srcElement
  msgbox % element.className
}
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

04 Dec 2013, 05:42

Habe nun mal gesucht, und es geht tatsächlich mit Shell.Explorer und write().
Hier ein Beispiel mit ComObjConnect, bei dem man auf die Elemente klicken kann, um deren Eigenschaften auszugeben:

Code: Select all

html =
(
<span class="active">span1</span><br>
<span class="inactive">span2</span><br>
<div id="d1">div1</div>
<div id="d2">div2</div>
)
Gui, Add, ActiveX, x0 y0 w400 h300 vWB, Shell.Explorer
WB.Navigate("about:tabs")
WB.document.write(html)
Gui, Show, w400 h300
ComObjConnect(x := WB.document, "WB_")
return

WB_OnClick(document)
{
  element := document.parentWindow.event.srcElement
  msgbox % "Element: " element.tagName
       . "`nClass: " element.className
       . "`nID: " element.id
       . "`nInhalt: " element.innerHTML
}

GuiClose:
ExitApp
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

04 Dec 2013, 12:00

Ah, danke für den Hinweis, jetzt weiß ich, wieso mein CSS nicht übernommen wurde ^^
Ich habe die Funktion nämlich schon etwas länger abgeändert genutzt (jedoch in einer anderen Version, da bei mir die Daten - kurze Informationen - in einer Art ini stehen und nur mit einem festgelegten Design angezeigt werden sollen), doch jetzt will ich eben mehr mit ActiveX anfangen.

Übrigens, die Idee mit about:blank hab ich nicht selber gehabt, das wird so auch im AHK-Installer genutzt.

Und deine Methode mit WB_OnClick ist wahrscheinlich noch komplizierter als meine bisherige (einfach eine Variable auf 1 oder 0 setzen) - da lass ich lieber erstmal meine. Vor allem weiß ich nicht, ob es mit deiner Lösung überhaupt möglich ist, die eigentliche Aktion zu stoppen - genau das ist ja der Sinn von meinem deaktivierten Button. Falls du sowas noch findest, denk ich sogar darüber nach, deine Lösung zu nutzen ;)
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

04 Dec 2013, 18:10

Du willst einen Klick auf einen Link abbrechen? Zum IE 7 fällt mir gerade nichts ein, IE 11 kann aber preventDefault():

Code: Select all

WB_OnClick(document)
{
  element := document.parentWindow.event.srcElement
  if(element.className = "inactive")
  {
    document.parentWindow.event.preventDefault()
  }
}
Man braucht aber gar keine Links. Will man die Optik eines Links, nimmt man ein Span mit dem CSS-Style "text-decoration: underline; cursor: pointer;". Das sieht dann aus wie ein Link, bleibt aber beim Draufklicken passiv und überlässt AHK die Kontrolle, AHK macht dann WB.Navigate() oder eben auch nicht.

Und wenn du bisher ein Flag auf 1 oder 0 gesetzt hast, kannst du das hier doch auch machen.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

05 Dec 2013, 14:13

Ich habs schon gelöst bekommen, ich hab einfach beim Start href="#" und mach dann, wenn es soweit ist, wb.document.getElementById("...").href = "...".
Das funktioniert auch einwandfrei und ich weiß auch nicht, wieso ich da nicht schon früher draufgekommen bin ^^
Das Problem ist, dass ich keine Garantie habe, dass IE 11 o.Ä. installiert ist und somit genutzt werden kann. Daher kann ich auch nicht einfach im CSS pointer-events nutzen.
Und einen "echten" Link brauche ich auch, damit ich einfach href angeben kann.

Aber so geht es ja nun.
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

05 Dec 2013, 16:38

Nur zur Klarstellung, ich meinte es so:

Code: Select all

html =
(
<span id="span1" style="text-decoration:underline; cursor:pointer; color: #009">http://ahkscript.org</span><br><br>
<button id="button1">Button1</button><br><br>
<button id="button2">Button2</button>
)
Gui, Add, ActiveX, x0 y0 w400 h300 vWB, Shell.Explorer
WB.Navigate("about:tabs")
WB.document.write(html)
Gui, Show, w400 h300
ComObjConnect(x := WB.document, "WB_")
return

WB_OnClick(document)
{
  Global WB
  element := document.parentWindow.event.srcElement
  if(element.id = "span1")
  {
    msgbox,,, "Link" geklickt, 1
    ; WB.Navigate("http://ahkscript.org")
  }
  else if(element.id = "button1")
    msgbox,,, Button1 geklickt, 1
  else if(element.id = "button2")
    msgbox,,, Button2 geklickt, 1
}

GuiClose:
ExitApp
Und "cursor:pointer" versteht auch der IE 7.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

06 Dec 2013, 11:17

Ja, das weiß ich schon, nur wie gesagt habe ich schon eine recht einfache Lösung gefunden.
Ich würde ja button nutzen, doch dafür bräuchte ich javascript, mit a kann ich einfach href angeben.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

12 Dec 2013, 14:51

Update:
Ich habe auf StackOverflow gefunden, dass man den jeweiligen Kompatibilitätsmodus des IE auch per Meta-Tag X-UA-Compatible setzen kann. Das sieht dann etwa so aus:

Code: Select all

<meta http-equiv="X-UA-Compatible" content="IE=edge">
Das ist natürlich die schönere Variante, da nicht extra in die Registry geschrieben werden muss und der Modus für jedes Control einzeln gesetzt werden kann.
Leider funktioniert das bei mir allerdings nicht. Ich habe auch schon die Tipps befolgt, den Tag als ersten Tag im head-Bereich zu positionieren (davor sind nur <head>, <html> und <!DOCTYPE>).

Jetzt würde mich mal interessieren, ob du das irgendwie hinbekommst. Wenn nicht, werde ich mal im englischen Bereich fragen. Ich brauch diese Option wirklich und die Registry-Lösung ist einfach sch**ße :?
Joe
Posts: 29
Joined: 02 Oct 2013, 04:21

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

12 Dec 2013, 16:31

Mit dem DOCTYPE kann man Browser in einen standardkonformen Modus schalten, siehe http://carsten-protsch.de/zwischennetz/ ... itung.html
Diese MS-Syntax macht wahrscheinlich das Gleiche, hat vielleicht noch mehr Optionen.

Ich kann mir aber nicht vorstellen, dass erst der IE7 die Seite lädt, und aufgrund einer Angabe im Dokument sich dann entscheidet, einen neueren IE zu laden. Es geht wohl eher darum, einen neueren IE dazu zu bringen, sich wie ein älterer zu verhalten.
User avatar
SAPlayer
Posts: 48
Joined: 30 Sep 2013, 13:38
Location: Germany
Contact:

Re: ActiveX: Erweitertes CSS (transition, box-shadow usw.)

13 Dec 2013, 10:52

Auch mit !DOCTYPE geht es nicht.
Aber irgendwie geht es ja anscheinend, denn in StackOverflow ging es ja auch um das WebBrowser-Control (das ich auch nutze).

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Ioniq and 6 guests