![]() |
Programming Guide |
WideStudio Index Table of contents |
Uma amostra de procedimento de evento para WSCvlabel
Tornando uma instância de WSCvlabel clicável
Na amostra de código de procedimento de evento, o procedimento mais básico cria uma instância de etiqueta (label) para reagir ao ponteiro de mouse. Aqui, poderá ser criado um procedimento para contar o número de cliques do mouse.
#include "WSDmouse.h"
//Set this to a label instance with WSEV_MOUSE_PRESS
// (MOUSE-PRESS trigger)
void cbop(WSCbase* object){
//(0) Which the mouse button is pressed?
// btn1 -> fire. btn2 or the other -> return.
if ( (WSGIappMouse()->getMouseStatus() & WS_MOUSE_BTN1) == 0){
return;
}
//(A)Get the value of the property: WSNuserValue
long value = object->getProperty(WSNuserValue);
//(B)Count it up.
value++;
//(C)Display the value.
object->setProperty(WSNlabelString,value);
//(D)Store the counted value into the property:
// WSNuserValue for the next time.
object->setProperty(WSNuserValue,value);
}Primeiramente, este procedimento de evento utiliza uma propriedade WSNlabelString para apresentar o número de cliques contado. O tipo de classe como WSCvbtn,WSCvlabel que a possui, pode ser usada com o disparador WSEV_MOUSE_PRESS, que será executado ao clique de uma mouse.
Se o disparador WSEV_MOUSE_IN é usado, então conta o número de entradas e saídas do ponteiro de mouse.
- (0): Distingui se o mouse teve o seu botão 1 pressionado. Utilize-o na sua implementação.
- (A): Utiliza a propriedade WSNuserValue que contém o valor do contador. O valor default da propriedade é 0, e pode ser usado livremente pelo usuário. O procedimento utiliza-o porque desejar estocar cada valor contado de cada instância de etiqueta. O valor contado torna-se único quando o procedimento utiliza uma variável estática para o contador, mesmo se usado por muitas instâncias de etiqueta.
- (B): Incrementa o contador.
- (C): Armazena na propriedade WSNlabelString para apresentá-la.
- (D): Armazena na propriedade WSNuserValue para a próxima vez..
Tornando WSCvlabel uma instância selecionável
Criaremos uma instãncia de etiqueta selecionável por clique de mouse. Para apresentar a instância selecionada, o procedimento altera a cor de fundo da mesma. O procecimento usa o método set/getUserData() para obter e armazenar informação em vez da propriedade WSNuserValue.
//Set this to a label instance with WSEV_MOUSE_PRESS // (MOUSE-PRESS trigger) void cbop(WSCbase* object){ //(A) Get the value with getUserData() long value = (long)object->getUserData("STATUS"); //(B) it makes the instance selected if value is 0, // and unselected if 1. if (value == 0){ //(C) Store the backcolor(which is string type) into WSNuserString WSCvariant color = object->getProperty(WSNbackColor); object->setProperty(WSNuserString,color); //(D)Set the backcolor to the selected color. object->setProperty(WSNbackColor,"slategray4"); //(E)Store the state with setUserData(). value = 1; object->setUserData("STATUS",(void*)value); }else{ //(F)Get the original backcolor from WSNuserString. WSCvariant color = object->getProperty(WSNuserString); //(G)Store it to WSNbackColor to display with the original color. object->setProperty(WSNbackColor,color); //(H)Store the state with setUserData(). value = 0; object->setUserData("STATUS",(void*)value); } }O tipo de classe tipo WSCvbtn,WSCvlabel que tem a propriedade WSNbackColor, pode ser usada com o disparador WSEV_MOUSE_PRESS. Será executada pelo clique do mouse.
- (A): Utiliza o método set/getUserData() para guardar o valor selecionado do estado. O valor default é 0, e pode ser escolhido livremente. O procedimento utiliza-o porque deseja ´guardar o status de cada instância.
- Pode especificar o nome do valor a estocar com setUserData(), e obtê-lo por um nome específico com getUserData().
- (B): Distingue o estado.
- (C): Guarda a cor original de fundo da propriedade WSNuserString.
- (D): Torna a instância selecionada.
- (E): Guarda o estado com setUserData() novamente.
- (F): Obtém o valor original do fundo com WSNuserString.
- (G): Guarda o valor original do fundo para WSNbackColor.
- (H): Guarda o estado com setUserData() novamente.
Tornando a instância de WSCvlabel realçável
Faz-se com WSEV_MOUSE_IN/OUT. O mouse entrando na área, torna a área realçada, e ao sair, torna a área ao seu estado normal.
O importante é criar um procedimento que precede um subprocedimento com WSEV_MOUSE_IN e outro WSEV_MOUSE_OUT
Quando o procedimento WSEV_INITIALIZE é executado, ele adiciona dois subprocedimento à instância que dispara WSEV_MOUSE_IN e WSEV_MOUSE_OUT para tornar a instância realçável. Um procedimento pode preceder muitos outros.
//a sub-procedure with WSEV_MOUSE_IN triggerA subop1() é executado pelo disparo de WSEV_MOUSE_IN, e torna a instância com o fundo realçado (a)(b). The subop2() é executado pelo disparo de WSEV_MOUSE_OUT, e torna o fundo ao seu estado original. O procedimento principal é executado por WSEV_INITIALIZE somente uma vez na execução do subprocedimento (E)(F).
void subop1(WSCbase* object){
//(A)Store the original back-color to WSNuserString
WSCvariant color = object->getProperty(WSNbackColor);
object->setProperty(WSNuserString,color);
//(B)highlight the instance.
object->setProperty(WSNbackColor,"slategray4");
}
//a sub-procedure with WSEV_MOUSE_OUT trigger
void subop1(WSCbase* object){
//(C)Get the original back-color from WSNuserString
WSCvariant color = object->getProperty(WSNuserString);
//(D)Store the original back color.
object->setProperty(WSNbackColor,color);
}
//a main-procedure with WSEV_INITIALIZE trigger
void cbop(WSCbase* object){
//If executed,it add the sub-procedures to the instance.
//(E) Setup a sub-procedure:WSEV_MOUSE_IN.
//ProcedureName="Highlight1" Trigger=WSEV_MOUSE_IN Function=subop1
WSCprocedure* ac1 = new WSCprocedure("Highlight1",WSEV_MOUSE_IN);
ac1->setFunction(subop1,"subop1");
object->addProcedure(ac1);
//(F) Setup a sub-procedure:WSEV_MOUSE_OUT.
//ProcedureName="Highlight2" Trigger=WSEV_MOUSE_OUT Function=subop2
WSCprocedure* ac2 = new WSCprocedure("Highlight2",WSEV_MOUSE_OUT);
ac2->setFunction(subop2,"subop2");
object->addProcedure(ac2);
}
Tornando um grupo selecionável de instâncias WSCvlabel
Pode-se tornar um grupo selecionável pelo mouse que tenha a classe base em comum.
O procedimento torna a instância selecionada pela armazenagem WS_SHADOW_IN na propriedade WSNshadowType e memoriza qual instância é selecionada pelo arquivamento da mesma na instância base.
//An event procedure with WSEV_MOUSE_PRESS triggerAs instâncias de etiquetas precisam itentificar cada instância para reconhecer qual instância é selecionada, então utiliza-se a propriedade WSNuserValue como um identificador de instância com um valor único.
void cbop(WSCbase* object){
//(A)Use the value of WSNuserValue as "instance identifier"
long val = object->getProperty(WSNuserValue);
//(B)Make the instance selected: WS_SHADOW_IN state.
object->setProperty(WSNshadowType,WS_SHADOW_IN);
//(C)Get the last selected instance which is memorized
with setUserData() of the parent instance.
WSCbase* parent = object->getParent();
WSCbase* target = (WSCbase*)parent->getUserData("SelectedItem");
//(D)Make it not selected: WS_SHADOW_OUT state.
if (target != NULL){
target->setProperty(WSNshadowType,WS_SHADOW_OUT);
}
if (target == object){
//(E)When clicking the selected instance twice,
// clear the selected state.
parent->setUserData("GroupValue",(void*)0);
parent->setUserData("SelectedItem",(void*)0);
}else{
//(E)The other,store the selected instance to the parent instance.
parent->setUserData("GroupValue",(void*)val); //Instance identifier
parent->setUserData("SelectedItem",(void*)object); //selected instance
}
}
- (A): Obtém o identificar de instância a partir da propriedade WSNuserValue.
- (B): Torna a instância selecionada com WS_SHADOW_IN.
- (C): Obtém a última instância que é selecionada a partir da instância base.
- (D): Torna a última não selecionada.
- (E): Torna a instância não selecionada se é selecionada duas vêzes e limpa os valores que são armazenados na intância base.
- (F): Guarda a nova intância selecionada na intância parente.
Copyright(C) WideStudio Development Team, 1999-2005 | Last modified: Jan 05, 2005 |