What happened to the Messenger Plus! forums on msghelp.net?
Shoutbox » MsgHelp Archive » Messenger Plus! for Live Messenger » Scripting » Tips

Pages: (2): « First « 1 [ 2 ] Last »
Tips
Author: Message:
tryxter
Junior Member
**

Avatar
A. Maia Ferreira @ PTnet

Posts: 51
Reputation: 1
35 / Male / –
Joined: Jan 2007
RE: Tips
JScript Reference

Since I'm starting using JScript for creating the plugins, I found a good JScript reference. It contains some examples too, so I though it could be useful to other programmers. ;)

You can download it here here.

Continue the great work!

(Thank's markee :))

.zip File Attachment: jsdoc.zip (578 KB)
This file has been downloaded 749 time(s).

This post was edited on 01-09-2007 at 01:13 AM by tryxter.
01-08-2007 06:46 PM
Profile E-Mail PM Find Quote Report
CookieRevised
Elite Member
*****

Avatar

Posts: 15519
Reputation: 173
– / Male / Flag
Joined: Jul 2003
Status: Away
RE: Tips
quote:
Originally posted by tryxter
JScript Reference

Since I'm starting using JScript for creating the plugins, I found a good JScript reference. It contains some examples too, so I though it could be useful to other programmers. ;)

You can download it here here.

Continue the great work!

(Thank's markee :))
Please never attach such official documentation. If MS updates it, people wont have the latest version... Instead only link to it.

Though, as a matter of fact, that official JScript 5.6 documentation is already available since a long time ago in the download section of the scripting database:
http://www.msgpluslive.net/scripts/browse/9/Others/
.-= A 'frrrrrrrituurrr' for Wacky =-.
01-28-2007 01:15 AM
Profile PM Find Quote Report
Matti
Elite Member
*****

Avatar
Script Developer and Helper

Posts: 1646
Reputation: 39
31 / Male / Flag
Joined: Apr 2004
RE: Tips
Change a ListViewControl's column header in real-time
When you're developing a big script for the mass, one day you'll want to add multilingual support. Most of the time, you can change the text of a control this with PlusWnd::SetControlText, but what if you have a nice ListViewControl with column headers to display interesting information? Formerly, developers simply re-wrote the XML file to make the change in the ListViewControl's <Columns> element, but this method can slow down your computer and is very impractical. Today, I'll show you a much more interesting way to do it. :)

The following method uses the LVM_SETCOLUMN message to set the column header's information. Not all options of the LVCOLUMN structure need to be used because we only want to change the text. Therefore, we also need to create a buffer to hold the string. The comments will clarify this. :)
code:
/*
[bool] SetColumnHeader(
   [hWnd] hWnd: Handle of the ListViewControl, retrieved with PlusWnd::GetControlHandle
   [number] iCol: Column id, the first column is 0, second is 1 etc.
   [string] sHeader: The new column header
)
Returns true if LVM_SETCOLUMNW succeeded, otherwise false.
*/


function SetColumnHeader(hWnd, iCol, sHeader) {

//Message constants
var LVM_FIRST = 0x1000;
var LVM_SETCOLUMNW = (LVM_FIRST + 96); //We'll use the Unicode instead of the ANSI version to have more characters supported
var LVCF_TEXT = 0x4;

//Create a buffer for the header
var pszText = Interop.Allocate((sHeader.length+1)*2); //Make a DataBloc where the header fits in perfectly
pszText.WriteString(0, sHeader); //Write the header in the DataBloc

//Create an LVCOLUMN structure
var LVCOLUMN = Interop.Allocate(16);
LVCOLUMN.WriteDWord(0, LVCF_TEXT); //mask: pszText is valid
LVCOLUMN.WriteDWord(12, pszText.DataPtr); //pszText: pointer to our buffer

//Call LVM_SETCOLUMNW to change the header and save the result
var Result = Interop.Call("user32", "SendMessageW", hWnd, LVM_SETCOLUMNW, iCol, LVCOLUMN);

//Clear the DataBlocs
pszText.Size = 0;
LVCOLUMN.Size = 0

//Return the result
return Result;

}
You may use and edit this snippet for your own scripts, but if you're going to release your script it'd be nice if you put a little credit in your script. :)

EDIT: Snippet now placed in a function for easier access.

This post was edited on 06-03-2007 at 08:11 AM by Matti.
Plus! Script Developer | Plus! Beta Tester | Creator of Countdown Live | Co-developer of Screenshot Sender 5

Found my post useful? Rate me!
06-02-2007 05:02 PM
Profile E-Mail PM Web Find Quote Report
Matti
Elite Member
*****

Avatar
Script Developer and Helper

Posts: 1646
Reputation: 39
31 / Male / Flag
Joined: Apr 2004
RE: Tips
Show a popup menu when you right-click a ListViewControl's item
This snippet will show you how you can create a popup menu which will pop up when the user right-clicks a ListViewControl's item, and how you should retrieve the response of the menu. It uses CreatePopupMenu to create the mnu, AppendMenuW to add items and TrackPopupMenu to open it and get the clicked menu item.

This snippet uses some parts of Matty's tray icon script, which initially was meant to create a tray icon with a popup menu. In this snippet, it was modified to only create a menu and show it on right-click. Much thanks to Matty to let me use his code in this snippet!

code:
//Message constants for menu
//These should be declared on global scope, so at the top of your script, outside any function

var MF_CHECKED = 0x8;
var MF_APPEND = 0x100;
var MF_DISABLED = 0x2;
var MF_GRAYED = 0x1;
var MF_SEPARATOR = 0x800;
var MF_STRING = 0x0;
var TPM_LEFTALIGN = 0x0;
var TPM_RETURNCMD = 0x0100;
var TPM_VERNEGANIMATION = 0x2000;

//Variable to store our subclass window in, needed to retrieve messages from the menu
//We don't need those messages, but MSDN says that we must pass a window handle
//Therefore, you should add a new window to your XML file, like this:
/*
<Window Id="WndSubclass" Version="1">
   <Attributes>
      <ShowInTaskbar>False</ShowInTaskbar>
   </Attributes>
   <DialogTmpl/>
   <Position Width="0" Height="0"/>
</Window>
*/

var subclass = false;

//This is an example function.
//It is just to demonstrate how you should place the menu creation code
//Original CreatePopupMenu and AppendMenuW code by Matty

function WindowOpen() {
   var PlusWnd = MsgPlus.CreateWnd("Windows.xml", "MyWindow"); //Create our window
   
   hMenu = Interop.Call("user32", "CreatePopupMenu"); //Create a new popup menu and get its handle
   //Add menu items
   Interop.Call("user32", "AppendMenuW", hMenu, MF_STRING, 101 /*This can be any number you want, and is identifier of the item*/, "Do this");
   Interop.Call("user32", "AppendMenuW", hMenu, MF_STRING, 102, "Do that");
   Interop.Call("user32", "AppendMenuW", hMenu, MF_SEPARATOR, 0, 0);
   Interop.Call("user32", "AppendMenuW", hMenu, MF_CHECKED, 103, "I'm checked!");
   
   //Do anything you want to do with your window after its creation...
}

//A sample function to process the menu click
function ProcessMenuItem(PlusWnd, LVItem, MnuItem) {
   //Let's see what item is clicked and react on it
   switch(MnuItem) {
      case 101: //Do this
         DoThis();
         break;
      case 102: //Do that
         DoThat(PlusWnd.LstView_GetItemText("LVThing", LVItem, 0)); //Send the item text of the 1st column of the right-clicked item to the function
         break;
      case 103: //I'm checked
         ToggleCheck();
         break;
   }
}

//The right-click event, probably the most important piece of this snippet
function OnMyWindowEvent_LstViewRClicked(PlusWnd, CtrlId, Index) {
   if(CtrlId == "LVThing") { //If our ListViewControl is clicked...
      if(Index < 0) { //If the click didn't occur on an item...
         return; //...do nothing
      } else {
         //Original GetCursorPos and TrackPopupMenu code by Matty
         if(!subclass) subclass = MsgPlus.CreateWnd("Windows.xml", "WndSubclass", 2); //Create our subclass window, if it's not yet created
         
         var POINTAPI = Interop.Allocate(8); //Create a structure to store the position of the cursor
         Interop.Call("user32", "GetCursorPos", POINTAPI); //Get the position of the cursor and store it
         
         var Result = Interop.Call("user32", "TrackPopupMenu", hMenuMore, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_VERNEGANIMATION, POINTAPI.ReadDWORD(0), POINTAPI.ReadDWORD(4), 0, subclass.Handle, 0); //Open the menu and store the result
         
         ProcessMenuItem(PlusWnd, Index, Result); //Send the result to a function for further processing
      }
   }
}

This post was edited on 12-06-2007 at 08:20 PM by Matti.
Plus! Script Developer | Plus! Beta Tester | Creator of Countdown Live | Co-developer of Screenshot Sender 5

Found my post useful? Rate me!
06-07-2007 05:38 PM
Profile E-Mail PM Web Find Quote Report
henry1817
New Member
*


Posts: 1
Joined: Dec 2009
Huh?  RE: Tips
can any1 tell me how to open debugging window again when i closed it????
12-30-2009 04:13 PM
Profile E-Mail PM Find Quote Report
matty
Scripting Guru
*****


Posts: 8336
Reputation: 109
39 / Male / Flag
Joined: Dec 2002
Status: Away
RE: Tips
Click the Script icon on the main contact list window. Then click Show Script Debugging

Or in code by using:

Javascript code:
Debug.DebuggingWindowVisible = true;


This post was edited on 12-30-2009 at 04:30 PM by matty.
12-30-2009 04:20 PM
Profile E-Mail PM Find Quote Report
whiz
Senior Member
****


Posts: 568
Reputation: 8
– / – / Flag
Joined: Nov 2008
RE: Tips
Creating a Modal Window

Create a modal dialog window, and keep it focused over a parent window.

Windows.xml
Spoiler:
XML code:
<Interfaces xmlns="urn:msgplus:interface" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:msgplus:interface PlusInterface.xsd">
 
<Window Id="WndParent" Version="1">
<!-- no specific guidelines for the parent window -->
 
    <Attributes>
        <Caption>Modal Test</Caption>
    </Attributes>
 
    <TitleBar>
        <Title>
            <Prefix>Image</Prefix>
            <Text>Modal Test</Text>
        </Title>
    </TitleBar>
 
    <Position Width="300" Height="250">
        <IsAbsolute>true</IsAbsolute>
    </Position>
 
    <DialogTmpl/>
 
    <Controls>
        <Control xsi:type="CodeEditControl" Id="EdtCode">
            <Position Left="3" Top="0" Width="280" Height="171">
                <Units>AllPixels</Units>
            </Position>
        </Control>
        <Control xsi:type="ButtonControl" Id="BtnConfirm">
            <Position Left="3" Top="177" Width="70">
                <Units>AllPixels</Units>
            </Position>
            <Attributes>
                <IsDefault>true</IsDefault>
            </Attributes>
            <StandardLook Template="Blue"/>
            <Caption>&amp;Confirm...</Caption>
            <Help>Display the confirmation...</Help>
        </Control>
        <Control xsi:type="ButtonControl" Id="BtnCancel">
            <Position Left="228" Top="177" Width="55">
                <Units>AllPixels</Units>
            </Position>
            <Caption>&amp;Close</Caption>
            <Help>Close the window...</Help>
        </Control>
    </Controls>
 
</Window>
 
<Window Id="WndChild" Version="1">
<!-- child window should not have taskbar button, and should not be allowed to minimize -->
 
    <Attributes>
        <Caption>Confirm?</Caption>
        <ShowInTaskbar>false</ShowInTaskbar>
    </Attributes>
 
    <TitleBar>
        <AllowMinimize>false</AllowMinimize>
        <AllowClose>false</AllowClose>
        <Title>
            <Prefix>Image</Prefix>
            <Text>Confirm?</Text>
        </Title>
    </TitleBar>
 
    <Position Width="120" Height="73">
        <IsAbsolute>true</IsAbsolute>
    </Position>
 
    <DialogTmpl/>
 
    <Controls>
        <Control xsi:type="ButtonControl" Id="BtnOk">
            <Position Left="2" Top="0" Width="40">
                <Units>AllPixels</Units>
            </Position>
            <StandardLook Template="Blue"/>
            <Caption>Ok</Caption>
        </Control>
        <Control xsi:type="ButtonControl" Id="BtnCancel">
            <Position Left="44" Top="0" Width="60">
                <Units>AllPixels</Units>
            </Position>
            <Caption>Cancel</Caption>
        </Control>
    </Controls>
 
</Window>
 
</Interfaces>


Modal Test.js
Spoiler:
Javascript code:
// make the parent window, make a variable for the child window
var WndParent = MsgPlus.CreateWnd("Interface.xml", "WndParent");
var WndChild = null;
 
// use any event here, this is just an example
function OnWndParentEvent_CtrlClicked(PlusWnd, ControlId)
{
    if (ControlId === "BtnConfirm")
    {
        // create the child, disable and monitor the parent
        WndChild = MsgPlus.CreateWnd("Interface.xml", "WndChild");
        Interop.Call("user32", "EnableWindow", WndParent.Handle, false);
        WndParent.RegisterMessageNotification(0x0006);
    }
}
 
// when the parent window is focused
function OnWndParentEvent_MessageNotification(PlusWnd, Message, wParam, lParam)
{
    if (wParam !== 0)
    {
        try
        {
            // focus the child window
            Interop.Call("user32", "SetFocus", WndChild.Handle);
            Interop.Call("user32", "BringWindowToTop", WndChild.Handle);
        }
        catch (error)
        {
        }
    }
}
 
function OnWndChildEvent_CtrlClicked(PlusWnd, ControlId)
{
    switch (ControlId)
    {
        case "BtnOk":
            // do whatever here, then close the child
            PlusWnd.Close(1);
            break;
    }
}
 
function OnWndChildEvent_Destroyed(PlusWnd, ExitCode)
{
    // enable and focus the parent window
    Interop.Call("user32", "EnableWindow", WndParent.Handle, true);
    Interop.Call("user32", "SetFocus", WndParent.Handle);
}


.plsc File Attachment: Modal Test.plsc (2.12 KB)
This file has been downloaded 284 time(s).

This post was edited on 06-24-2010 at 10:56 AM by whiz.
06-24-2010 10:53 AM
Profile E-Mail PM Find Quote Report
Pages: (2): « First « 1 [ 2 ] Last »
« Next Oldest Return to Top Next Newest »


Threaded Mode | Linear Mode
View a Printable Version
Send this Thread to a Friend
Subscribe | Add to Favorites
Rate This Thread:

Forum Jump:

Forum Rules:
You cannot post new threads
You cannot post replies
You cannot post attachments
You can edit your posts
HTML is Off
myCode is On
Smilies are On
[img] Code is On