Jump to content


Photo

DELPHI + FUNCIONES JAVASCRIPT EN INTRAWEB


  • Please log in to reply
8 replies to this topic

#1 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 22 September 2013 - 11:46 AM

Hola a todos, buscando acá en los foros no encontré nada referente a este tema y como recientemente estoy tratando de encontrar una solución a un tema especial de JavaScript en intraweb les comparto algo de mi búsqueda y parte de mi problema no resuelto. Iniciemos con un problema presentado a otro programador y la solucion que para su necesidad ayudo a solucionar su problema y al final les planteo el mio actual.. Nota: Este Tema seria algo asi ...."Como puedo agregar y utilizar mis funciones Javascript desde una aplicación Intraweb". Sin mas vueltas esto va asi..

Jorgen Lanesskog : Se preguntaba, en una aplicacion intraweb como y donde debo agregar mis funciones JavaScript que en mi codigo HTML funcionan correctamente, las funciones son las siguientes..

[js]******* JAVASCRIPT *******

<script>
function submitAction(){
var link = document.location.href;
var searchString = "redirect=";
var equalIndex = link.indexOf(searchString);
var redirectUrl = "";

if (document.forms[0].action == "") {
var url = window.location.href;
var args = new Object();
var query = location.search.substring(1);
var pairs = query.split("&");
for(var i=0;i<pairs.length;i  ){
var pos = pairs[i].indexOf('=');
if(pos == -1) continue;
var argname = pairs[i].substring(0,pos);
var value = pairs[i].substring(pos 1);
args[argname] = unescape(value);
}
document.forms[0].action = args.switch_url;
}
if(equalIndex >= 0) {
equalIndex  = searchString.length;
redirectUrl = "";
redirectUrl  = link.substring(equalIndex);
}
if(redirectUrl.length > 255)
redirectUrl = redirectUrl.substring(0,255);
document.forms[0].redirect_url.value = redirectUrl;
document.forms[0].buttonClicked.value = 4;
document.forms[0].submit();
}

function loadAction(){
var url = window.location.href;
var args = new Object();
var query = location.search.substring(1);
var pairs = query.split("&");
for(var i=0;i<pairs.length;i  ){
var pos = pairs[i].indexOf('=');
if(pos == -1) continue;
var argname = pairs[i].substring(0,pos);
var value = pairs[i].substring(pos 1);
args[argname] = unescape(value);
}
document.forms[0].action = args.switch_url;

// This is the status code returned from webauth login action
// Any value of status code from 1 to 5 is error condition and user
// should be shown error as below or modify the message as it suits
// the customer

if(args.statusCode == 1){
alert("Du er allerede logget inn.");
}
else if(args.statusCode == 2){
alert("Du er allerede logget inn.");
}
else if(args.statusCode == 3){
alert("Du er allerede logget inn.");
}
else if(args.statusCode == 4){
alert("Brukernavn og/eller passord er feil.");
}
else if(args.statusCode == 5){
alert("Brukernavn og/eller passord er feil.");
}
}
</script>
[/js]
Básicamente un OnSumit y un Onload en codigo JavaScript. (en mi caso son un recua de funciones obtenidas del codigo HTML de una pagina WEB, pero que que incluyen tambien un Onload)

RESPUESTA:

Normalmente, se coloca el cuerpo de la función en la propiedad extraHeader del Formulario, existen dos formas:
Opt1. extraheader.Add ('<script type = "text / javascript"src = "insight.js"> </ script> '); / / Como inclusión de un archivo
Opt2. extraheader.Add ('<script type="text/javascript"> **aqui van todas las funciones javascripts** </ script> '); //explícitamente

Como llamar la funcion OnLoad:

En el render la forma colocar algo asi.: addToInitProc ('myOnload ();'  # 13 # 10);

Como llamar la funcion OnSumit:

puede ser llamado como parte del button.onClick. El botón tiene una propiedad ScriptEvents donde se puede añadir (en onClick),
por ejemplo. SubmitAction(password) . Esto funciona si la contraseña se define en el código JavaScript.

Ahora mi problema: Hasta el punto de llamar la función Onload con addToInitProc ('myOnload ();'  # 13 # 10); todo OK,
la cuestión es que yo tengo una función JavaScript que actualiza los datos de una tabla en HTML y lo hace muy bien por cierto,
estoy trabajando con una Tablet de captura de firma que es Touch también, y el driver solo funciona para Web así que pues toco
por intraweb, a parte me sirve mas adelante para incluirla en un desarrollo que también es intraweb y pues todo hasta allí calza bien,
resulta que los datos que captura la función que encontré actualiza directamente como ya dije una tabla HTML y yo necesito poder
informar a mi formulario delph Intraweb que recibí un dato y disparar algún evento para hacer una tarea especial con ese dato.

En mi forma delphi coloque un IWEDIT de nombre EDTVERSION y un IWLABEL, (nota: estoy usando templates en mi aplicación), he
referenciado mi controles dentro del template HTML asi:


  • 0

#2 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 22 September 2013 - 11:51 AM


<div id="wb_Text4" style="position:absolute;left:568px;top:34px;width:471px;height:11px;text-align:right;z-index:9;">
<span style="color:#000000;font-family:Arial;font-size:9.3px;">{%EDTVERSION%}{%LBLVERSION%}</span></div>


La idea es que en mi control EDTVERSION pudiera captura un valor cualquiera de la tabla HTML que se actualiza por JavaScripts y que
de alguna forma se disparara el evento OnChange del EDTVERSION, asi el valor asigando pasara al control LBLVERSION, lo que me
serviría para validar que el componente EDTVERSION tiene control de lo que recibe como valor en la propiedad text.

Esta es mi funcion JavaScript que actualiza la tabla HTML.

function updateTouchDataTables()
{
var finger1;
var finger2;
var numFingers;

//alert("updateTouchDataTables");

// Get touch data for as many fingers as supported.
_touchRawFingerData = getWacomPlugin().touchAPI.TouchRawFingerData(_touchCurrentDeviceID);

//alert("got data");

if ( _touchRawFingerData.Status == -1 )
{
//alert("Bad finger data status returned");
return;
}

// Update table data
numFingers = _touchRawFingerData.NumFingers;

_docNumFingersReported.innerHTML = _touchRawFingerData.NumFingers;

//alert("numFingers: " + _docNumFingersReported);

// For now, only updating Finger1

// Add finger1 data.
finger1 = _touchRawFingerData.FingerList[0];

_docFingerID1.innerHTML = String(finger1.FingerID);
_docPosX1.innerHTML = String(Math.round(finger1.PosX * 1000)/1000);
_docPosY1.innerHTML = String(Math.round(finger1.PosY * 1000)/1000);
_docWidth1.innerHTML = String(Math.round(finger1.Width * 1000)/1000);
_docHeight1.innerHTML = String(Math.round(finger1.Height * 1000)/1000);
_docOrientation1.innerHTML = String(finger1.Orientation);
_docConfidence1.innerHTML = String(finger1.Confidence);
_docSensitivity1.innerHTML = String(finger1.Sensitivity);
_docFingerState1.innerHTML = fingerStateDescription(finger1.TouchState); //String(finger1.TouchState);

[b]_docMylabel.value = String(Math.round(finger1.PosX * 1000)/1000);//He añadido esta línea la cual actualiza y escribe un valor en mi control EDTVERSION.[/b]
}


y en mi función OnLoad añadí la siguiente línea para hacer referencia a mi IWEDIT.

_docMylabel = document.getElementById('EDTVERSION');

hasta acá, mi control EDTVERSION toma el mismo valor que se asigna a la fila de la tabla HTML. Pero no se dispara el evento OnChange,
es decir el control EDIT ni se percata que a cambiado de valor y por tanto no se dispara ningún evento en la forma o en el IWEDIT que
me permita realizar la validación que necesito hacer.

Alguna ayuda/idea de como implementar o hacer que se dispare el evento OnChange o cualquier otro evento que haga que mi forma
delphi IW sepa que debe validar el valor recibido y sobre todo que no se recargue la pagina, hago la observación porque intente hacerlo
con un IwTIMER  y cada que entraba al evento ontimer me autofrescaba la pagina haciendo un reload a un driver que solo se debe cargar
al abrir la pagina y dicho driver se carga en el OnLoad creado en JavaScript... Gracias.. :s  (li)  8o|  |-)
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 23 September 2013 - 09:45 AM

Puedes hacer que en el onload, se asigne una función al evento onchange del editbox. Trataré de en la noche darme un tiempo para incluir un cpodigo.
  • 0

#4 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 27 September 2013 - 11:06 AM

!!!!????
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 27 September 2013 - 11:08 AM

!!!!????


jajajaja y eso que significa amigo... :p
  • 0

#6 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 27 September 2013 - 08:31 PM

Quede igual....  :D
  • 0

#7 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 18 October 2013 - 11:08 PM

Bueno dándole y dándole he avanzado un poco, voy como el cangrejo, un paso atrás y dos para adelante. por fin logre hacer que mi aplicación delphi se enterara de lo que yo quisiera. aunque ahora la invocación del evento onload() por medio de  AddToInitProc ('myOnload();' + #13#10); ya no me funciona, así que ahora estoy con ese paso atrás.  :cry:

[js]  if(LBLACCIONIWCL.value==1){
      if (EDTONEIWCL.value == ""){
  LBLACCIONIWCL.value=0;
  EDTONEIWCL.value="RIGTH HAND";
    MsgSummit = "D|"+_docPosX21.innerHTML + "|"+_docPosY21.innerHTML;
  //alert(MsgSummit);
  IWTop().SubmitClickConfirm("EDTONE",MsgSummit, true,"");
  }
  }[/js]

La solucion esta en utilizar en el codigo javascrip IWTop().SubmitClickConfirm("EDTONE",MsgSummit, true,""); , y capturar el evento onsumit del contro TIwEdit de nombre "EDTONE" (le cambie el nombre de EDTVERSION a EDTONE)



delphi
  1. procedure TFrmIndex.EDTONESubmit(Sender: TObject);
  2. begin
  3. Token:=EDTONE.GetSubmitParam;
  4. TmrEvaluar(Token);
  5. Application.ProcessMessages;
  6. end;


  • 0

#8 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 11 November 2013 - 11:25 PM

Pronto mas informacion respecto a este tema, no todo quedo en solo esto..  (b)
  • 0

#9 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 posts
  • LocationBogota

Posted 13 February 2016 - 01:43 PM

Retomando tema....


  • 0




IP.Board spam blocked by CleanTalk.