VectorWorks forum: werken met dialogen - VectorWorks forum

Ga naar inhoud

Pagina 1 van 1

werken met dialogen

#1 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 23 April 2008 - 08:30 AM

Hello,
Kan er iemand mij beknopt uitleggen hoe je met dialogen en de buttons en textfields omgaat.

Voorlopig heb ik deze volgorde in het script.

Algemene bepalingen in het script
Procedure aanmaken voor de layout van je dialoog
- hierin steken alle buttons, textfields etc.
Procedure aanmaken voor bv invullen van listboxes ofzo,
Procedure aanmaken voor handelingen die gestuurd worden door de in layout aangemaakte buttons of dergelijke.
Uitvoering van algemeen script.

Specifieker had ik graag geweten waar ik bv de parameters, nodige velden of records kan terug vinden voor het aansturen van bv een button of textfield of andere objecten die in je layout aangemaakt zijn.

mvg

EDIT: of is het zo dat elke layout element een handle mee krijgt of een BOOLEAN is zodanig dat je met IF kan werken?
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#2 Gebruiker is offline   maarten. 

  • Expert
  • Groep: Members
  • Posts: 1,622
  • Lid geworden: 20-January 05
  • Gender:Not Telling
  • Stad:Houthalen

Gepost 24 April 2008 - 07:58 AM

QUOTE(mve @ 23 Apr 2008 09:30 ) Bekijk Post

Specifieker had ik graag geweten waar ik bv de parameters, nodige velden of records kan terug vinden voor het aansturen van bv een button of textfield of andere objecten die in je layout aangemaakt zijn.


'k Snap niet helemaal wat je hiermee bedoelt. Volgens mij kan je een button niet aansturen vanuit een script, dat moet de gebruiker toch altijd zelf doen...
Wil je misschien al informatie in je velden zetten, afkomstig uit je tekening? Deze moet je namelijk oproepen in je hoofdprocedure. Deze gegevens kan je dan in je Eventsetup laten invullen in je velden.

Home: mac OSX 10.58 | VW 2008 SP3
Work: windows 7 | VW 2010 SP4
0

#3 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 24 April 2008 - 12:12 PM

Even verder toelichten, ( zie bijlage).
@ Maarten, jij hebt daar een script gemaakt met een dialoog gemaakt voor klassen te verplaatsen naar een klassemap. Het was eigenlijk een algemene vraag hoe je zoiets opzet.
Vanuit een commando: een dialoog laten opkomen met daar de bewerkingen in.
Of via het infopallet een knop hebben waar dan nog verdere parameters kunnen ingevuld worden die kunnen gebruikt worden voor de PIO.
Hopelijk nu iets duidelijker.

mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#4 Gebruiker is offline   maarten. 

  • Expert
  • Groep: Members
  • Posts: 1,622
  • Lid geworden: 20-January 05
  • Gender:Not Telling
  • Stad:Houthalen

Gepost 24 April 2008 - 01:10 PM

Ik ga er van uit dat je weet hoe je een Dialoog kan maken? indien niet kun je daar beter eerst aan beginnen. Hier legt Dieter heel duidelijk uit hoe zo'n Dialoog gemaakt wordt. Zeer leerzaam imo.

Eens je je Dialoog hebt, wil je deze oproepen via een knop in het infopalet. Dat moet je doen met PioEvents. Hier ben ik zelf gene held in. Best zoek je op http://www.vectorlab.info naar "events" en lees je die pagina even door. Example 3 gaat over een knop in het infopalet.

Een tip misschien?
Voor dit uit te proberen kan je simpel beginnen, en eens je knop werkt, kan je de rest van je script invoegen.
Home: mac OSX 10.58 | VW 2008 SP3
Work: windows 7 | VW 2010 SP4
0

#5 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

  Gepost 24 April 2008 - 01:59 PM

"VIELEN DANK"
weer iets om te verwerken, de nieuwe uitdagingen slaan mij om de oren.

mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#6 Gebruiker is offline   maarten. 

  • Expert
  • Groep: Members
  • Posts: 1,622
  • Lid geworden: 20-January 05
  • Gender:Not Telling
  • Stad:Houthalen

Gepost 25 April 2008 - 07:23 AM

Nog een tip misschien: Als je met Events werkt, moet je wel "Herreken na Script-event" aanvinken.
Ga naar de VectorScript Insteekmodule en klik op de knop "Instellingen", en onderaan in dat venster kan je die optie vinden.
'k Dacht dat dat niet op die site stond, of ik heb het niet gezien.
Home: mac OSX 10.58 | VW 2008 SP3
Work: windows 7 | VW 2010 SP4
0

#7 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 10 July 2012 - 07:50 PM

Nog eens dit draadje ophalen.
Ik wil toch eens dieper graven in de modern en zelf gemaakt dialogen.

Voorlopig heb ik het toch wat aan mij langs laten gaan maar nu moet het er eens van komen.
Het eerste wat ik wil proberen is een pio met een kop die een dialoog opent waar een tekstblok inzit die een groter tekstvlak heeft of het lijntje uit van het infopalet.
De inhoud is zeker een dynarr of char om toch meer dan 255 Chars te kunnen plaatsen.
Kan er iemand mij op weg zetten.
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#8 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 10 July 2012 - 07:58 PM

PROCEDURE Example10; CONST kObjOnInitXProperties = 5; kResetEventID = 3; kObjXPropHasUIOverride = 8; kWidgetButton = 12; kObjOnObjectUIButtonHit = 35; buttonID_1 = 1234; {user-definable index}
Bv, hier een knipsel uit vectorlabs,
Hier worden constanten gedeclareerd maar waar kan ik deze vinden welke te gebruiken. In de Vw function ref dacht ik niet ze tegen te komen, maar waar wel.
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#9 Gebruiker is offline   maarten. 

  • Expert
  • Groep: Members
  • Posts: 1,622
  • Lid geworden: 20-January 05
  • Gender:Not Telling
  • Stad:Houthalen

Gepost 11 July 2012 - 07:49 AM

Ik dacht dat die constanten in de documentatie van de SDK opgelijst waren maar ik kan de correcte locatie even niet terugvinden.

Hier is een voorbeeld van hoe je jou gevraagde zou kunnen oplossen. Vergeet niet "Herreken bij Scrip-event" aan te vinken in de instellingen van je plug-in.

PROCEDURE Voorbeeld;
CONST
{Event handling stuff}
	kObjOnInitXProperties = 5;
	kResetEventID = 3;
	kObjXPropHasUIOverride = 8;
	kWidgetButton = 12;
	kObjOnObjectUIButtonHit = 35;
	buttonID_1 = 1234; {user-definable index}
VAR
	objectName : STRING;
	objectHand,recordHand,wallHand : HANDLE;
	TheEvent,TheButton,thisDoesNothing : LONGINT;		{Event handling stuff}
	bool : BOOLEAN;
	DiaID : INTEGER;
	tekst : DYNARRAY of CHAR;

		{Sub}
		PROCEDURE DialogHandler(VAR item :LONGINT; data :LONGINT);
		VAR
			int,i,sel : INTEGER;
		BEGIN
			CASE item OF
				SetupDialogC:
				BEGIN
					
				END;
				1:	{ok knop}
				BEGIN
					{neem de tekst uit de tekstbox}
					GetMultilineText(DiaID,100,tekst);
					AlrtDialog(Tekst);
				END;
				2:	{cancel knop}
				BEGIN
					
				END;
			END;
		END;
		{EndSub}
	
	{Sub}
	PROCEDURE Dialog;
	VAR
		int : INTEGER;
	BEGIN
		DiaID:=CreateLayout('Joinery example',FALSE,'OK','Cancel');
		
		CreateEditTextBox(DiaID,100,'Een tekst',120,10);
		
		SetFirstLayoutItem(DiaID,100);
		
		int:=RunLayoutDialog(DiaID,DialogHandler);
	END;
	{EndSub}
	
{Main}
BEGIN
	bool:=GetCustomObjectInfo(objectName,objectHand,recordHand,wallHand);
	vsoGetEventInfo(TheEvent,TheButton);
	CASE TheEvent OF
	{User has single-clicked the object's icon.}
		kObjOnInitXProperties:
		BEGIN
		{This tells VW to let the object decide what goes onto the Object Info palette.}
			bool:=SetObjPropVS(kObjXPropHasUIOverride,TRUE);
		{add the button}
			bool:=vsoAppendWidget(kWidgetButton,buttonID_1,'Knop tekst ...',thisDoesNothing);
		END;
	{user has clicked on the button in the OIP}
		kObjOnObjectUIButtonHit:
		BEGIN
			CASE TheButton OF
				buttonID_1:
				BEGIN
					{open de dialoog}
					Dialog;
				END;
			END;
		END;
	{reset has been called}
		kResetEventID:
		BEGIN
			{hier komt hetgeen getekend moet worden in je PIO}
			Rect(0,0,100cm,100cm);
		END;
	END;
END;
Run(Voorbeeld);

Home: mac OSX 10.58 | VW 2008 SP3
Work: windows 7 | VW 2010 SP4
0

#10 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 11 July 2012 - 08:20 AM

Bedankt,
Ik zal het eens bestuderen.
Net gevonden dat ze opgesomd staan in de SDK. Was op die plaats nog niet gaan zoeken. Ik vermoede dat de SDK specifiek voor het programmeren was met C++ en een externe compiler.
Een tweede punt wat ik vermoed en zo reeds blijkt uit jou voorbeeld is dat de complexiteit van programmeren in het kwadraat is tov gewone vectorscripts.
Maw, ik wil mij er echt wel in verdiepen maar zal toch de nodige voorzichtigheid aan boord leggen of de pio al dan niet de nodige uitbreidingen nodig heeft.



De code moet omvatten:
1/ algemene event omschrijving, event initialising
2/ procedures om een dialoog aan te maken
3/ procedures om de dialogen te laten werken
4/ procedures om interactie te hebben tussen dialoog en de feitelijke code als records
5/ procedures om die de feitelijke uitvoeringscode ( tekenen van rechthoek, text, enz ) voorziet.

Om nu af te sluiten:
1/ Is het handig event gestuurde pio's in een externe compiler te maken of via deze in VW?
2/ De modern dialogs zijn deze ook event gestuurd? Waarschijnlijk enkel wanneer een 'widget'button in je infopallet wenst.

Het komt misschien allemaal wat rommelig over maar het is voor mij een zoektocht hoe alles bij gaat en staat.
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#11 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 11 July 2012 - 08:24 AM

Maarten,
Heb net eens die code in een punt pio geplaatst maar het enigste dat gebeurd is het tekenen van de rechthoek.
De knoppen, tekstinputvlakken, etc worden niet gemaakt.
grtn.
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#12 Gebruiker is offline   Dieter Geerts 

  • Expert
  • Groep: Members
  • Posts: 753
  • Lid geworden: 26-April 07
  • Gender:Male
  • Location:Gent
  • Interests:VectorWorks, VectorScript, FileMaker Pro,...
  • Stad:Gent

Gepost 11 July 2012 - 09:34 AM

mve,

Je kan ook dialogen gebruiken zonder een event-enabled pio te hebben. Als het alleen een dialoog is dat je extra wil, dan is het zeker niet nodig om event-enabled the gaan. Je kan bv een checkbox plaatsen als parameter die altijd unchecked staat en die je altijd voor het eindigen van het script op unchecked zet. Als de gebruiker deze aanvinkt, dan zal je code lopen, controleer je of hij checked is, en dan kan je een dialoog laten lopen. De resultaten van het dialoog kan je dan naar wens gebruiken.

Ik vermoed dat je nu al een pio hebt die werkt en je gewoon een dialoog wil toevoegen? Zoja, dan zou ik proberen wat ik hier beschreven heb. Als het niet goed lukt moet je maar verder vragen.
0

#13 Gebruiker is offline   Dieter Geerts 

  • Expert
  • Groep: Members
  • Posts: 753
  • Lid geworden: 26-April 07
  • Gender:Male
  • Location:Gent
  • Interests:VectorWorks, VectorScript, FileMaker Pro,...
  • Stad:Gent

Gepost 11 July 2012 - 09:40 AM

Bekijk Post mve, op 11 July 2012 - 08:20 AM, zei:

1/ Is het handig event gestuurde pio's in een externe compiler te maken of via deze in VW?
2/ De modern dialogs zijn deze ook event gestuurd? Waarschijnlijk enkel wanneer een 'widget'button in je infopallet wenst.


1. Het is altijd handig om pio's in een externe textverwerker te maken. Je hebt dan color coding etc... Of ze nu event-enabled zijn of niet. Je splitst ook best pio op in meerdere bestanden als deze te groot word. Voor je pio met dialoog bv kan je alles van het dialoog in een apart bestand schrijven.

2. Dialogs zijn altijd event-gestuurd, dit hangt niet samen met het feit of je pio event-enabled is of niet.
0

#14 Gebruiker is offline   Dieter Geerts 

  • Expert
  • Groep: Members
  • Posts: 753
  • Lid geworden: 26-April 07
  • Gender:Male
  • Location:Gent
  • Interests:VectorWorks, VectorScript, FileMaker Pro,...
  • Stad:Gent

Gepost 11 July 2012 - 09:43 AM

Bekijk Post mve, op 10 July 2012 - 07:50 PM, zei:

De inhoud is zeker een dynarr of char om toch meer dan 255 Chars te kunnen plaatsen.


Voor zo ver ik me herinner kan je niet meer dan 255 chars hebben in om het even welke textbox. Dit kan in de laatste versie van VW wel al opgelost zijn, moet dit zelf nog eens uitproberen.
Afhankelijk van wat je wil bereiken kan je met meerdere textboxes werken en deze dan in code samenvoegen? Of met een lijst zoals in het algemene opmerkingen gereedschap.
0

#15 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 11 July 2012 - 10:01 AM

Bekijk Post Dieter Geerts, op 11 July 2012 - 09:43 AM, zei:

Voor zo ver ik me herinner kan je niet meer dan 255 chars hebben in om het even welke textbox. Dit kan in de laatste versie van VW wel al opgelost zijn, moet dit zelf nog eens uitproberen.
Afhankelijk van wat je wil bereiken kan je met meerdere textboxes werken en deze dan in code samenvoegen? Of met een lijst zoals in het algemene opmerkingen gereedschap.

1/Ik veronderstel dan als je meer dan 255 chars wil gebruiken dat ze dit omzeilen via het wegschrijven van data naar een txt of xml file en deze dan laden of iets in die aard.

2/Het maken van die event enabled dialogen is om bv, dropdown listboxes etc. te laten vullen met de gevraagde data, tekstinvoervakken die groot genoeg zijn om de volledig tekst, of scrolbaar leesbaar te maken.

2.1/ Het is wel niet de bedoeling dat ik er nu dialogen maak in de trend van de trapmodule of schrijnwerk ( waarschijnlijk C++). Pop-up dialogen met wat extra instellingen zou al goed zijn. Een dialoog zoals je voorstelde bij rioleringen zou al maximaal zijn. Het is natuurlijk zoal bij alles, als het vlot gaan we een stapje verder.
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#16 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 11 July 2012 - 10:02 AM

Bekijk Post Dieter Geerts, op 11 July 2012 - 09:34 AM, zei:

mve,

Je kan ook dialogen gebruiken zonder een event-enabled pio te hebben. Als het alleen een dialoog is dat je extra wil, dan is het zeker niet nodig om event-enabled the gaan. Je kan bv een checkbox plaatsen als parameter die altijd unchecked staat en die je altijd voor het eindigen van het script op unchecked zet. Als de gebruiker deze aanvinkt, dan zal je code lopen, controleer je of hij checked is, en dan kan je een dialoog laten lopen. De resultaten van het dialoog kan je dan naar wens gebruiken.

Ik vermoed dat je nu al een pio hebt die werkt en je gewoon een dialoog wil toevoegen? Zoja, dan zou ik proberen wat ik hier beschreven heb. Als het niet goed lukt moet je maar verder vragen.


Is ook een optie om een knop procedure te omzeilen.
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#17 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 14 November 2012 - 08:16 AM

Hey,
Ik heb events en dialogen al wat getest.
Voor het volgende had ik graag wat zekerheid.
- Om gegevens te gebruiken uit een custom dialoog dienen steeds parameters in een vectorscript te zitten?
- Die gegevens worden getransfereerd van het dialoog via GetField en SetRfield naar het object?
- sommige parameters kunnen niet-zichtbaar gezet worden om het OIP ordelijk te houden.

Of is er een andere manier ( muz van externe txt files ) om met die gegevens om te gaan?

mvg,
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#18 Gebruiker is offline   Dieter Geerts 

  • Expert
  • Groep: Members
  • Posts: 753
  • Lid geworden: 26-April 07
  • Gender:Male
  • Location:Gent
  • Interests:VectorWorks, VectorScript, FileMaker Pro,...
  • Stad:Gent

Gepost 14 November 2012 - 10:42 AM

Bekijk Post mve, op 14 November 2012 - 08:16 AM, zei:

- Om gegevens te gebruiken uit een custom dialoog dienen steeds parameters in een vectorscript te zitten?


Variabelen heb je nodig om de waarden uit het dialoog te kunnen gebruiken nadat het dialoog uitgevoerd is. Eens deze gesloten is kan je de waarden uit de elementen van het dialoog niet meer oproepen.
Parameters heb je nodig indien je de waarden van deze variabelen ook wilt bewaren tussen uitvoeringen van het pio.

Bekijk Post mve, op 14 November 2012 - 08:16 AM, zei:

- Die gegevens worden getransfereerd van het dialoog via GetField en SetRfield naar het object?


Met GetField, en andere functies, afhankelijk van wat voor element het gaat, kan je de waarden in je variabelen gaan stoppen. Dit doe je best in het OkEvent van het dialoog.
Met SetRField kan je dan de waarde van de variabelen gaan geven aan parameters van je pio.

Bekijk Post mve, op 14 November 2012 - 08:16 AM, zei:

- sommige parameters kunnen niet-zichtbaar gezet worden om het OIP ordelijk te houden.


Dit kan op verschillende manieren:
Ofwel zorg je ervoor dat je pio event-enabled, waardoor je zelf kunt gaan bepalen wat er op het oip komt te staan.
Ofwel, als je geen event-enabled pio nodig hebt, laat je je parameter beginnen met twee underscores, bv: __onzichtbaar.
0

#19 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 14 November 2012 - 11:18 AM

Het is juist ik kan data opslaan in variabelen zonder daarvoor parameters te gebruiken. Deze variablen kan ik dan gebruiken om bewerkingen uit te voeren of weg te schrijven naar parameters. Zo hoef ik geen onnodige parameters aan te maken ( hoe verstrooid kan je zijn ).

Dieter,
Ik had je eergisteren nog een mailtje gestuurd betreffende het opnemen of wegschrijven van een dialoog. ( ik kan momenteel niet aan mijn mail ) Heb je daar een antwoord voor?
mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

#20 Gebruiker is offline   mve 

  • Expert
  • Groep: Members
  • Posts: 407
  • Lid geworden: 03-January 07
  • Gender:Male
  • Location:Roeselare
  • Stad:roeselare

Gepost 01 March 2015 - 05:58 PM

Weet iemand wat ik hier verkeerd doe?

Ik wil de selectietoestand van control 10 (checkbox) opslaan in een global variabele gMessage. Maar ik krijg steeds de foutmelding bij handleDialog -> Case 10-> itemsel dat: identifier niet gedeclareerd is, expected string,…

Bijkomend had ik graag geweten: is het steeds de gewoonte bij customdialogs dat er geen gegevens worden bewaard in een dialogbox maar dat die gegevens steeds moeten worden weggeschreven in 'global'variables?

PROCEDURE CreateDialog;
VAR
DialogId: LONGINT;
result : LONGINT;
gMessage:BOOLEAN;

PROCEDURE DefDialog (var id:LONGINT); BEGIN
id := CreateLayout('TEST', FALSE , 'OK','CANCEL');
{CONTROLS}
CreateStaticText(id,1,'Dit is een statische tekst lijn',-1);
CreateCheckbox(id,10,'checkbox test 1');

{LAYOUT DIALOG}
SetFirstLayoutItem(id, 1);
SetBelowItem(id,1,2,0,0);

SetBelowItem(id,10,2,0,0);

END;


PROCEDURE HandleDialog( VAR item : LONGINT; data : LONGINT);BEGIN
	CASE item OF
		SetupDialogC:
		BEGIN

		END;
		
		10:
		begin
		if itemsel(10) THEN gMessage:=TRUE ELSE gMessage:=FALSE;
		end;

		
	END;
	
END;

BEGIN
DefDialog(DialogID);
result:=runlayoutdialog(dialogid,handleDialog);
if gMessage = TRUE THEN message ('ok')

END;




mvg,
Vandewalle Mathias

> mac os 10.9.3 VW 2014 ARC
0

Deel dit topic:


Pagina 1 van 1

1 Gebruiker(s) lezen dit topic
0 gebruikers, 1 gasten, 0 anonieme gebruikers