Neuigkeiten


Treeview Switchbar Tutorial für mIRC

03. Oct 2005 / Kommentare

Original verfasst am: 01.01.2003

Treeview Switchbar

Dies ist ein Tutorial - eine Anleitung. Simples kopieren wird euch nicht zu einer voll funktionstüchtigen Switchbar bringen, das Tutorial zeigt euch nur die wichtigsten Schritte. Grundlegende Erfahrungen wären hilfreich wenn nicht sogar verpflichtend.

Einleitung

Eine Treeview Switchbar ist nichts weiteres als ein Dialog den man mithilfe von .dll Dateien bearbeitet. Dazu werden 2 verschiedene benötigt, zum einen MDX welche aus dem List-Objekt innerhalb des Dialogs den Treeview erstellt und zum anderen kTools Ultradock welche den Dialog an die Seite von mIRC legt.

1. Schritt: Der Dialog

Bild der Switchbar nach Schritt 1Zuerst erstellen man nun den benötigten Dialog mit der Bezeichnung "switchbar". Hier kommen die oben genannten Erfahrungen ins Spiel, d.h. ihr solltet schon wissen wie man einen Dialog kreiert. Bei den Koordinaten und Grössenangaben orientiert man sich an den meinigen welche aber später an die eigenen Bedürfnisse angepasst werden können.. x und y müssen jeweills -1 sein, für w (Breite) und h (Höhe) werden die Werte 75 und 1000 (dbu) genommen. In diesem Dialog wird nun ein List-Objekt hinein gesetzt welches später mit Mdx bearbeitet wird. Auch hier wird -1 für x und y verwendet und w wird auf 78 sowie h wiedermals auf 1000 gesetzt Als ID nimmt man logischwerweise die 1 und nun sollte das ganze so aussehen:

dialog switchbar { title "switchbar" size -1 -1 75 1000 option dbu list 1, -1 -1 78 1000, size }

Zu Testzwecken kann man sich diesen Dialog jetzt mit /dialog -m switchbar switchbar ansehen.

2. Schritt: Bearbeiten mit MDX/Ultradock

Bild der Switchbar nach Schritt 2Das erstellen des Treeviews geschieht im Init-Event des Dialogs, hierzu legt man sich zuerst ein "mdx"-Alias an welches /dll pfadzurmdx.dll $1- ausführt. Selbiges wird dann für die UltraDock.dll gemacht. Nachdem nun die beiden Aliase erstellt sind muss MDX für den Dialog geladen werden, d.h. es werden nun folgende zwei Befehle in dem oben genannten Event ausgeführt:

mdx SetMircVersion $version mdx MarkDialog $dname

Und gleich danach werden auch schon die ersten visuellen Modifikationen vorgenommen. Mit

mdx SetDialog $dname style mdx SetControlMDX $dname 1 treeview haslines hasbuttons showsel > pfadzurviews.mdx

entfernt man den Kopf des Dialogs und lädt dann in der zweiten Zeile den Treeview. Wichtig ist, dass der Pfad hier angepasst wird. Ich würde empfehlen in dem MDX Help File nachzulesen was genau die Befehle "SetMircVersion", "MarkDialog", "SetDialog" und "SetControlMDX" machen. Kurz gefasst sagen die ersten beiden MDX nur die Mirc Version und den aktuellen Dialog welchen man bearbeiten möchte (man kann ja mehr als einen haben), ein wenig komplizierter werden dann die beiden anderen, beide haben diverse Optionen und Parameter welche man, wie gesagt, ruhig mal nachlesen sollte.

Jetzt kann der Dialog bereits an der Seite angedockt werden:

ultradock Dock 0 $dialog(switchbar).hwnd left switchbar

Nun ist es mal wieder an der Zeit zu schaun wieweit die Treeview ist (/dialog -m switchbar switchbar), da jetzt aber oben der Balken fehlt benötigen man /dialog -c switchbar switchbar um den Dialog wieder zu schliessen! Sobald jetzt die gewünschten Icons hinzugefügt wurd kann man auch schon anfangen Inhalte hinzuzufügen. Hierfür werden drei Befehle gebraucht welche alle mit "did -i $dname 1 1" in die erste Zeile unserer Switchbar geschrieben werden. Sollten sie nun auch wirklich optisch hineingeschrieben werden weiss man, dass mit den Pfaden vom MDX etwas nicht stimmt.

did -i $dname 1 1 clearicons normal did -i $dname 1 1 iconsize normal small did -i $dname 1 1 seticon normal 0 pfadzumicon.ico

In der ersten Zeile werden erstmal alle Icons die geladen sind (falls welche geladen sind) gelöscht, mit der zweiten legt man die Grösse fest. Letzteren Befehl muss man nur je nachdem wieviele Icons hinzugefügt werden sollen wiederholen. Die 0 bewirkt, dass diese einfach der Reihe nach durchnummeriert werden, nun sollte auch klar werden warum zuerst gelöscht werden musste. Um Missverständnissen vorzubeugen hier nochmal ein Beispiel wie man mit der letzten Zeile umgeht:

did -i $dname 1 1 seticon normal 0 pfadzumstatus.ico did -i $dname 1 1 seticon normal 0 pfadzumchannel.ico did -i $dname 1 1 seticon normal 0 pfadzumquery.ico

Fertig ist unser Treeview ;)

3. Schritt: Laden des Inhalts

Bild der Switchbar nach Schritt 3Jetzt fängt die richtige Arbeit erst an,es wird nun ein Alias namens "/load.switchbar" angelegt mit welchem nun die Einträge in die Bar gemacht werden. Zuerst wird überprüft ob die Switchbar überhaupt offen ist und löscht dann den ganzen Inhalt falls welcher vorhanden ist:

alias load.switchbar { if ($dialog(switchbar)) { did -r switchbar 1 } }

Nun kommt der eigentliche Teil, unter dem did -r (Zeile 4) folgt nun eine While-Schleife welche sämtliche Networks zu welchen mIRC connected ist durchgeht und hinzufügt.

var %s = 1 while (%s <= $scon(0)) { scon %s did -i switchbar 1 1 cb root did -a switchbar 1 +eb 1 1 $iif($status != disconnected,$iif($scon(%s).network == $null,$scon(%s).server $chr(9) $scon(%s).server,$scon(%s).network $chr(9) $scon(%s).network / $scon(%s).server),Not connected) inc %s }

In diese Schleife wiederum werden nochmals (Zeile 6) zwei weitere eingefsetzt welche die entsprechenden Channel und Queries erstellen womit man dann folgendes hat:

did -i switchbar 1 1 cb last did -a switchbar 1 +e 3 3 Channel ( $+ $chan(0) $+ ) $chr(9) Channel ( $+ $chan(0) $+ ) did -i switchbar 1 1 cb last var %i = 1 while (%i <= $chan(0)) { did -a switchbar 1 2 2 $chan(%i) $chr(9) $chan(%i) inc %i } did -i switchbar 1 1 cb up did -a switchbar 1 +e 3 3 Queries ( $+ $query(0) $+ ) $chr(9) Queries ( $+ $query(0) $+ ) did -i switchbar 1 1 cb last var %i = 1 while (%i <= $query(0)) { did -a switchbar 1 3 3 $query(%i) $chr(9) $query(%i) inc %i }

Anmerkung:

Ich denke diesen Code sollte man leicht nachvollziehen können wenn man ein wenig Ahnung hat, was ja die Vorraussetzung für dieses Tutorial ist. Mit den Befehlen welche mit "did -i switchbar 1 1 cb" beginnen navigieren wir durch die Verzeichnisse. "Cb root" steht somit für das oberste (Grund-/Hauptverzeichnis, sozusagen c: auf unserer Festplatte), "cb last" sagt MDX das dies der letzte Eintrag (vorerst) auf dieser Ebene sein soll und wir nun gerne die nächsten Einträge unterhalb des voherigens erstellen möchten. Das heisst wir machen auf "cb root" den Server (e.g. QuakeNet) dann "cb last" und dort Channel sowie Queries. Mit "cb up" wiederum sagen wir dann das wir wieder ein Verzeichnis hoch möchten, in diesem Fall "cb root". Wie man oben sieht fügt man einzelnde Punkte unter Verwendung von did -a switchbar 1 hinzu. Die Attribute +eb stehen hierbei für expanded und bold - weitere kann man der MDX Help entnehmen. Die folgenden 2 Zahlen sind die Nummern vom Icon. Danach adden wir den eigentlichen Text zweimal getrennt mit einem $chr(9). Der Teil hinter dem Tab ($chr(9)) stellt unseren Tooltip dar.

did -a [dname] [id] [attr] [icon] [icon] [text] $chr(9) [tooltip]

Nachdem dies getan ist fügt man unterhalb der Server DCC/@Windows und alles andere nach demselben Prinzip hinzu.

/dialog -m switchbar switchbar /load.switchbar

4. Schritt: Klick mich!

Um jetzt noch navigieren zu können wird ein "Sclick"-Event benötigt.

on *:DIALOG:switchbar:sclick:1: { tokenize 32 $did(1,1) echo -a $1- }

Zu Testzwecken kann jetzt hemmungslos auf der Switchbar herumgeklickt werden. Von Interesse sind in der Ausgabe die hinteren Zahlen welche die Verzeichnisse wiedergeben durch die man vorher mit "cb" navigiert ist. Zu beachten ist, dass alle Zahlen um eins erhöht sind.

slclick select mouse 2 3 3

Diese Zeile zum Beispiel würde bedeuten das in dem ersten Network, unter dem zweiten Eintrag (Queries) auf das zweite Query geklickt wurde. Diese Ausgabe muss nun weiterverarbeitet werden, was theoretisch aber kein Problem darstellen dürfte.

Tipps:

5. Schritt: Doch wie...

... aktualisierst man das nun!? Tja das ist eine Frage die ich nicht so leicht beantworten kann. Es gibt zwei gängige Methoden:

Methode 1:

In jedem Event das /load.switchbar Alias aufrufen und einfach die komplette Switchbar neu laden. Nachteil: Auf langsameren Rechnern bzw. auch auf schnelleren flackert es jedesmal wenn die Switchbar neu geladen wird, nicht so schön und auch Arbeitsintensiver für den PC, für dich selber nicht, das ist auch der Vorteil.

on *:JOIN:#:{ if ($nick == $me) { .timer -m 1 1 load.switchbar } } on *:CONNECT:{ .timer -m 1 1 load.switchbar } on *:OPEN:*:{ .timer -m 1 1 load.switchbar } ...

Methode 2:

Man bearbeitet in jedem Event nur den Teil der betroffen ist. Hierzu kann man z.B. wenn man etwas löschen möchte zuerst ausrechnen wo genau der Eintrag liegen sollte und dann mit /did -d switchbar 1 [id] löschen. Editieren wiederum (Icons wechseln, Font bold darstellen) kann man mit "replaceitem"

did -i switchbar 1 1 replaceitem [id] [attr] [icon] [icon] [text] $chr(9) [tooltip]

Geht man also davon aus, dass die Zeile welche beim klicken slclick select mouse 2 2 9 ausgibt (8ter Channel im ersten Network) geändern werden soll:

did -i switchbar 1 1 cb root 2 2 did -i switchbar 1 1 replaceitem 9 +b [icon] [icon] #chan $chr(9) #chan

Das heisst rd muss zuerst mit der ersten Zeile an die Stelle hingegangen werden und anschliessend mit dem zweiten Befehl die Zeile überschrieben werden.. Diese Methode ist schöner aber auch um einiges komplizierter und dementsprechend auch Buganfälliger.

Nachwort

Update: Zum Thema "replaceitem"

Obwohl ich innerhalb dieses Tutorials den MDX Befehl replaceitem schon zur Sprache brachte sehe ich mich gezwungen hier nochmal ein wenig was zu erläutern da wohl das lesen und verstehen der MDX Help einigen Schwierigkeiten bereitet.

did -i switchbar 1 1 cb root

Hiermit kommen wir dorthin wo die Server/Networks aufgelistet sind, ins Hauptverzeichnis

did -i switchbar 1 1 cb root 2

Erstes Network

did -i switchbar 1 1 cb root 3

Zweites Network

did -i switchbar 1 1 cb root 2 2

Channel des ersten Networks

did -i switchbar 1 1 cb root 2 3

Queries des ersten Networks

Mit diesen Befehlen müssen wir zuerst navigieren bevor wir mit replaceitem was verändern. Wie ich oben schon erwähnte hat replaceitem folgenden Syntax, did -i switchbar 1 1 replaceitem [id] [attr] [icon] [icon] [text] $chr(9) [tooltip]. Wenn wir jetzt also mit did -i switchbar 1 1 cb root 2 2 zu den Channel unseres ersten Networks "navigiert" sind müssen wir bei replaceitem als [id] 2 für den ersten Channel angeben, 3 für den zweiten und soweiter. Das heisst wir machen zum Beispiel did -i switchbar 1 1 cb root 2 2 | did -i switchbar 1 1 replaceitem 3 +b 1 1 #chan $chr(9) #chan um den zweiten Channel des ersten Networks dick zu schreiben.

Bold ist wie ihr evt. gesehen habt das b, da sind wir auch schon beim Thema "Wie lasse ich ein Channel dick anzeigen". Ganz einfach, ihr macht genau das was ich eben getan hab im on Text Event, d.h. ihr schaut das wievielte Network es ist und der wievielte Chan (das erfahrt ihr wenn ihr durch $chan() bzw. $scon() cycled und überschreibt den Eintrag mit

~ Kommentare ~

ein noob am 12. Jan '07 18:56

Hi ich hab eine Frage.
Also ich habe die 2. Methode fürs Aktualisieren genommen.
Zuerst navigiere ich zu den Channels des jeweiligen Netzwerkes.
Dann will ich mit did -a switchbar 1 2 %status $chan(%ichan) $chr(9) $chan(%ichan) den Channel hinzufügen.
Nur irgendwie ist er dann an der untersten Stelle(obwohl er zb. an der 3. sein sollte)
Wie handhabe ich es so, dass er an seiner richtigen Position angezeigt wird.

ein schlauerer nub^^ am 15. Jan '07 23:32

Hi echt nettes Tutorial!
Hab auch die 2. Methode genommen und ich finde es echt super, das du den "Usern" nicht alles fertig präsemtierst, sondern sie nach denken lässt.
1+ dafür ;)

Kommentar hinterlassen

Counter Service | Service von ranking-links.de