werken met dialogen
#1
Gepost 23 April 2008 - 08:30 AM
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?
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#2
Gepost 24 April 2008 - 07:58 AM
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.
Work: windows 7 | VW 2010 SP4
#3
Gepost 24 April 2008 - 12:12 PM
@ 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.
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#4
Gepost 24 April 2008 - 01:10 PM
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.
Work: windows 7 | VW 2010 SP4
#6
Gepost 25 April 2008 - 07:23 AM
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.
Work: windows 7 | VW 2010 SP4
#7
Gepost 10 July 2012 - 07:50 PM
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.
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#8
Gepost 10 July 2012 - 07:58 PM
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.
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#9
Gepost 11 July 2012 - 07:49 AM
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);
Work: windows 7 | VW 2010 SP4
#10
Gepost 11 July 2012 - 08:20 AM
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.
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#12
Gepost 11 July 2012 - 09:34 AM
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.
#13
Gepost 11 July 2012 - 09:40 AM
mve, op 11 July 2012 - 08:20 AM, zei:
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.
#14
Gepost 11 July 2012 - 09:43 AM
mve, op 10 July 2012 - 07:50 PM, 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.
#15
Gepost 11 July 2012 - 10:01 AM
Dieter Geerts, op 11 July 2012 - 09:43 AM, zei:
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.
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#16
Gepost 11 July 2012 - 10:02 AM
Dieter Geerts, op 11 July 2012 - 09:34 AM, zei:
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.
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#17
Gepost 14 November 2012 - 08:16 AM
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,
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#18
Gepost 14 November 2012 - 10:42 AM
mve, op 14 November 2012 - 08:16 AM, zei:
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.
mve, op 14 November 2012 - 08:16 AM, zei:
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.
mve, op 14 November 2012 - 08:16 AM, zei:
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.
#19
Gepost 14 November 2012 - 11:18 AM
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?
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC
#20
Gepost 01 March 2015 - 05:58 PM
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;
Vandewalle Mathias
> mac os 10.9.3 VW 2014 ARC