[ Aleksandar Ružičić @ 27.07.2004. 01:25 ] @
Evo sta me interesuje:
Napisao sam program koji koristi pluginove. I to na sledeci nacin: prvo unzipuje plugin, onda procita .wtp fajl u kome je naznaceno koje kontrole treba da se postave (u glavnom programu) i sta treba da se postavi za te kontrole (x, y, w, h, caption,...). I kada se izvrsi neki event, npr. klikne se na dugme: salje se poruka pluginu koji, kada je procita izvrsi neku operaciju.
E sve to lepo radi, samo sto trenutno izmedju glavnog programa i plugina komuniciram preko jednog ini fajla (!).

Zna li neko kako mogu da saljem poruke iz jednog programa u drugi preko nekih API funkcija ili slicno? Ja sam prvo razmisljao da sve to radim preko clipboarda, ali to nije bas zgodno...

Hvala unapred!
[ komptrade @ 27.07.2004. 07:17 ] @
Mozes li da mi objasnis kako da napravim da moj program ima pluginove?
Citao sam u onoj temi ali mi nije bas jasno.
Molim te ako mozes ovde samo copy/paste taj kod i tvog projekta.

Hvala.
[ mladenovicz @ 27.07.2004. 09:31 ] @
A sta ti je taj addin, VB projekat, ActiveX EXE, ActiveX DLL? Napravi da bude AxEXE ili DLL, onda kreiras neki objekat iz njega i tu onda imas propertyje, evente, ...i na taj nacin dve komponente komuniciraju
[ Mashinovodja @ 27.07.2004. 11:37 ] @
Po mom mišljenju, najlakši način da VB program komunicira s plug-inom jeste da taj plug-in bude napisan kao ActiveX EXE ili DLL komponenta koja izlaže određena javna svojstva i metode. Otprilike kao kada u VB aplikaciji pozivaš Excel/Word da bi generisao ili izmenio Excelov/Wordov dokument, ili pokreneš Outlook da bi poslao mail.
[ komptrade @ 27.07.2004. 16:16 ] @
Hvala ti na odgovoru ali ja pojma nemam o tome.

Mozes li da mi objasnis korak po korak , kako da to uradim?

Ili ako moze neko drugi , @mladenovicz ili @krckoorascic
[ Aleksandar Ružičić @ 28.07.2004. 01:50 ] @
Prvo da kažem da mi je ovo prvi program i da na njemu učim VB.
Tako da još uvek ne znam da radim sa DLL-ovima, ActiveX EXE i drugim kontrolama ...
Meni treba kako da pošaljem npr ovakvu poruku:
Code:

CommandButton,1,Click

...

->komptrade:
evo kako ja to radim (mnogo prosto):
Imam plugin koji se sastoji iz običnog ini fajla, koji izgleda nešto ovako:
Code:

[Plugin]
Ime=Onemogući Regedit
OS=Svi Windowsi
UkupnoKontrola=2
Kontrola1=OptionButton
Kontrola2=OptionButton
Unload=Restart
Info=Uz pomoć ovog tweak-a možete da zabranite pokretanje regedit.exe-a i .reg fajlova.~~Važno:~Ovo neće onemogućiti WinTweaker!

[Kontrola1]
X=2000
Y=500
W=3000
H=300
Caption=Omogući Regedit

[Kontrola2]
X=2000
Y=1000
W=3000
H=300
Caption=Onemogući Regedit



Kako možeš da vidiš u Plugin delu imam neke informacije o pluginu (moj program služi za optimizaciju regietry baze, pa zato koristim OS...) izmedju ostalih i brojkontrola koje treba da se učitaju. Zatim ide Kontrola1 i Kontrola2 (gde su upisani tipovi kontrola koje treba da se učitaju). Posle Plugin dela za svaku kontrolu podešavam neke parametre (svaki tip kontrole ima svoje parametre i default vrednosti za iste ako nije naznačeno u pluginu).
A evo kako u glavnom programu čitam plugin:
Code:

Public Sub UcitajPlugin(MainPlugin As String)
On Error Goto error_handler

Dim brKontrola As String, Kontrola As String

  brKontrola=GetProfile("Plugin", "UkupnoKontrola", vbNullString, MainPlugin)
  
  For i = 1 To CInt(brKontrola)
   Kontrola=GetProfile("Plugin", "Kontrola" & i, vbNullString, MainPlugin)
   UcitajKontrolu Kontrola, CInt(i), MainPlugin
 Next i

Exit Sub
error_handler:
MsgBox GetMsg(15)
End Sub

Private Sub UcitajKontrolu(tip As String, index As Integer, resource As String)
Dim br As Integer
With frmMain  
 Select Case tip
     Case "OptionButton"
         br = .Control_OptionButton.UBound + 1
         Load .Control_OptionButton(br)
         .Control_OptionButton(br).Left = GetProfile("Kontrola" & index, "X", "0", resource)
            .Control_OptionButton(br).Top = GetProfile("Kontrola" & index, "Y", "0", resource)
            .Control_OptionButton(br).Width = GetProfile("Kontrola" & index, "W", "1000", resource)
            .Control_OptionButton(br).Height = GetProfile("Kontrola" & index, "H", "300", resource)
            .Control_OptionButton(br).Caption = GetProfile("Kontrola" & index, "Caption", vbNullString, resource)
            .Control_OptionButton.Enabled = CBool(GetProfile("Kontrola" & index, "Enabled", "1", resource))
      Case "CommandButton"
         'Slični je i za CommandButton, ne mogu više da kucam...
       End Select
End With
End Sub


I to je to oko učitavanja kontrola (nadam se da si me razumeo).
Drugi fajl koji ulazi u sastav mog plugina je ustvari običan VB program koji ima samo modul. Poziva se kada se plugin učita i gasi se kada se učita neki drugi ili kada se izlazi iz programa.
Ja na formi imam jedan commandbutton cmdTweak koji služi da se napravljene promene unesu u regedit. u Click eventu za cmdDefault imam ovo:
Code:

Posalji "Tweak"

'a imam ovakav sub:
Public Sub Posalji(poruka As String)
WriteProfile("MessageCenter", "Poruka", poruka, TempDir & "send.tmp")
End Sub


I kada plugin vidi promenu u send.tmp fajlu čita poruku i slično kao u UcitajKontrolu() sub-u, uz pomoć Select Case i Split funkcija uperedjuje primljenu poruku sa mogućim rešenjima. U ovom slučaju kada primi poruku "Tweak" tražiće od glavnog programa value parametar za optionbutton (samo jedan, u ovom slučaju nema potrebe da ga pita za obe kontrole...) i kada ga dobije uneće to u registry...

Ne znam dal si me išta razumeo, ako hoćeš mogu da ti pošaljem moj program (i ceo projekat za njega) kada ga završim?

Pozdrav svima!

[ komptrade @ 28.07.2004. 07:07 ] @
Hvala ti puno!

Sad cu da probam da uradim...