Hej! Hej. Dessvärre kör jag direkt mot html-sidorna, men det går i alla fall snabbare än en webbläsare... Men jag försöker att utveckla koden så att den inte skall bli beroende av design i vissa lägen, vilket den dock lätt blir... Nu har jag skrivit en idé som dock kan ändras så att den passar potentiella plugin-makare! :) Oj vad mycket text ;) Jo, men problemet blir att det inte ens är bestämt HUR ett plugin ska kommunicera med PelleProg, vilka inställningar som skall finnas, vilka filer som behövs, vilka funktioner och events som kan användas etc. Ok, jag har börjat lite granna nu och undrar exakt vad som borde finnas i ett api...Någon som kan något om plugins?
Jag ska börja impletera lite teknik för att hantera plugins i PelleProg och behöver hjälp med att hitta på ett bra system...
Jag har tänkt mig att använda ActiveX för ändamålet. Det finns dock några problem: Det ska finnas ett standardiserat interface med tillgång till de vanligaste funktionerna/objecten i PelleProg, det måste gå att få tag på alla plugins efter någon form av sökning (alla aktiva), det måste finns något enkelt sätt för ett plugin att visa mer än ett fönster (alla fönster måste ligga i en egen tråd så att de inte "klumpar" sig, dvs. de måste ha samma relativa position (z-index)) etc. Dessutom måste de ha en hel del annat smått & gott...
Om du känner på dig att du har någon bra idé så skriv här för jag har hur många som helst som inte ens fungerar bra i teorin...
Eftersom att jag knappt börjat så är det mesta fritt... Har dock tänkt mig en main-klass som alla plugins kan använda innehållande en rad olika funktioner, objekt etc. Men själva strukturen på pluginen måste bli bra från början. Har ev. tännkt mig att tilllåta användning av ms-script engine så att den utan activeX kompilator också kan skrivaSv: Någon som kan något om plugins?
Jag undrar bara vad du har för gränssnitt att programmera mot. Har Pelle lagt upp ett interface som stödjer det du försöker göra??
Detta är ett krav om det skall finnas stabilitet och kompabilitet mot ett annat system.
//freddaSv: Någon som kan något om plugins?
Jag klurar lite på det och har lyckats få ihop en A4 med text, men det är bara ytligt med ett exempel. Internt i programmet så är det ju fritt, utåt sköter PelleProg programmet allt så att det egentligen bara blir exe-filen att uppdatera vid design byte.
/Mvh
Oskar Johansson
PS. Vill mycket gärna ha hjälp! DS.Sv: Någon som kan något om plugins?
PelleProg - Plugin System
PelleProg skall ha ett eget pluginsystem för att man ska kunna skriva just plugins... För att det skall bli enkelt för vem som helst att skriva plugins så kommer det att finnas ett öppet gränssnitt att använda. För den som vill veta något speciellt så finns källkoden helt gratis att använda. Det finns ett object som man kan annvända för att få tag på de viktigast funktionerna såsom Data Gränssnitt, Användar Inställningar, Logga in och ut, komma åt olika tjänsters rå-text(t.ex: iMail, chat, forum etc) starta plugins, läsa/sätta inställningar i konfiguarationsfiler m.m.
Eftersom att PelleProg är fullständigt plugin beroende så klarar den inte något själv mer än logga in och ut, ändra inställningar för användaren samt lite annat. Alla andra funktioner på PelleSoft sköter pluginen. Olika script tekniker kommer också att tilllåtas för de som inte har en ActiveX kompilator/inte kan något kompilerat språk. Alla plugins är skrivna i ActiveX t.ex. VC++, Delphi samt VB.
För att det skall bli enkelt för någon att skriva ett simpelt plugin som t.ex kollar om man har några nya iMails så behövs bara några rader kod såsom impletering av standard objektet och deklaration av två händelser, onLogin och onLogout. Alla plugins som använder standard objectet kommer sedermera att anropas när man loggar in respektive loggar ur. I standard objectet kan du sedan anropa en funktion som ger dig tillgång till din iMail inkorg. Allt returneras och du kan både ta reda på antalet iMail, avsändare, ID på iMail, datum (utan sekunder) samt om det är nytt. Icke att förglömma en smidig booleansk variabel som talar om hurvida du har några nya iMails. Om du har det så är du ju bara att säga det! Nu är ju inte det fulländat eftersom att det kan ske t.ex. ett fel eller liknande vilket gör att du då måste pröva igen. likaså kan det vara bra att registrera alla nya iMails i en array så att du vid nästa koll vet ifall du redan har larmat om det.
Vi säger att den här koden hör till ett fönster med en timer som kollar under förutsättningen att du är inloggad. Du har också en caption som håller reda på hur många iMails du har och hur många nya det finns. Vidare kan du ha någon form av grid där du har alla iMails instoppade. Men hur gör du när du vill läsa dem då? Det finns det också funktioner för! :)
Nu kommer vi till delen då du vill läsa det du fått från funktionen på något vettigt sätt. Då måste det smartaste vara att öppna ett nytt fönster, MEN du kan göra på två sätt; dim x as new frmReadIMail är det normala eller en vanlig frmReadIMail.show. Efter allt kan du fylla textrutan som finns i med texten du har. Skillnaden mellan variant 1 och 2 är att variant 1 alltid skapar ett nytt fönster medan variant 2 bara visar samma fönster och medför att det sammanlagt bara kan finnas ett läs-fönster. Med variant 1 kan det finnas oändligt många fönster.
Som du märker så kommer de dock att klumpa sig, dvs. om du lägger ett annat program överst och sen klickar på bara ett utav dem så kommer ändå de andra att följa med. Inte önskvärt. Då får du istället ta till ett tredje knep; trådning. Det finns inbyggt i standardobjektet. Bara ange projektnamn.objectnamn och du får tillbaka en referens till det nya objectet. Objectet du skapar kan innehålla vad som helst, en funktion för att sätta innehållet och andra detaljet kan vara bra. för att skapa ett nytt formulär så kör du dim as new frmReadIMail i en function i ditt object. Glöm inte att ta bort objectet sen bara (och att köra unload på formuläret i terminate)! Nu kan du spara undan referensen i en collection så att när du stänger ditt huvudfönster kan loopa igenom din collection och ta bort dem. Inte svårare än så!
Det var ett långt exempel men det förklarar meningen med alla dessa delade metoder etc. Eftersom att allt användbart för att få ut text bör vara delat så kan man helt enkelt skicka in sin funktion till (INTE BESTÄMMT ÄN) så läggs det till så att alla kan använda den i framtida versioner. För att det inet skall bli något problem så kan bara exe-filen laddas hem separat för dem som inte är intresserade av källkoden, resterande är hänvisade att ladda hem alltihopa. Ev. så skall jag fundera på ett system där man laddar hem installationsprogram i vb som i sin tur laddar hem alla nödvändiga moduler samt källkod. I sin tur så kan nedladdningsprogrammet vara PelleProg...
Det kommer dock behövas en del extra-filer runt om som t.ex bilder etc. alla bilder som används bör vara externa så att inte bilder behöver uppdateras när något fixas. Det behövs också en konfiguarations fil för att kunna spara inställningar om pluginet samt hurvida det ens får köras och under vilka omständigheter. Likaså i vilka menyer och ev. om någon speciell metod skall anropas med någon speciell parameter, t.ex om man har lagt till ett alternativ i utforskaren för att ladda upp en fil till filarean, med zippning och allt. Då kan det vara bra att kunna skicka med en parameter till en metod enligt ett visst format.
En del regler kommer också att finnas:
Ta bort alla referenser som inte används, formulär skall tas bort ur minnet så fort som möjligt efter stängning
Snåla med minnet, dvs. inga jättearrayer
Använd i möjligaste mån INTE Internet Explorer kontrollen pga. 1) Den tar mycket minne 2) Alla har inte Internet Explorer. Använd istället RTF kontrollen, undersök en rtf-fil sparad med den kontrollen, inte wordpad. Däri kan du hitta hur man byter färg etc. Antagligen kommer det finns metoder för att färga html-kod (<br><b><font> etc.) till rtf.
Hoppa över att deklarera som variant om det går
Använd felhantering
Jag hoppas att det var begripligt, i alla fall en del av det... :) Hör av dig med synpunkter!
Det blev en bit!Sv: Någon som kan något om plugins?
Du kan inte göra en eller två plugins själv, och lägga ut PelleProg nånstans, så man fattar principen?
Vore ju smidigt..
Mvh
MolleSv: Någon som kan något om plugins?
DET är problemet...
Det jag skrev tar inte upp så mycket, men har ett exempel för att man förhoppningsvis skall förstå principen, men mycket är inte bestämt.
Jag tänkte lägga upp en fullständig rfc på allt så att man kan komma med förslag på saker som är helt uppåt väggarna etc.Sv: Någon som kan något om plugins?
Har impleterat:
Funktioner:
doLogin(ShowBox As Boolean, Optional Password As String) As Boolean
doLogout()
Events:
onLogin(Password As String, UserID As Long)
onLogout(Password As String, UserID As Long)
Detta räcker inte så jag vill veta vad som skall finnas i det... Har tänkt att lägga in alla funktioner för att kolla t.ex. iMail, Chat, Användardata etc. Men vad mer borde finnas? Tänk er in vad ett plugin skall göra så kanske ni kommer på något...