Ошибка object expected on line 1

I get Error «Object Expected» on line 1, char 1 (where-ever this is) on my script here in IE7. It works fine in Firefox, and the error console prints nothing.

I tried multiple ways to call my function but none works:

<a href="javascript:doit()">Turingmaschine starten</a>
<a href="#" onclick="doit()">Turingmaschine starten</a>

What could be the problem?

<script type="text/javascript" language="JavaScript">

var state;
var index;
var program;
var data;

const S=0;
const X=1;
const S2=2;
const X2=3;
const M=4;
const E="SE";

function doit()
{
    state=document.getElementById("stat").value;
    program = document.getElementById("prog").value.split("n");
    index = document.getElementById("dat").value.indexOf("Z")>>1;
    data = document.getElementById("dat").value.replace(/Z,/, "").split(",");

    for (var i = 0; i<program.length; i++)
    {
        program[i]=program[i].split(",");
    }

    while(state!=E)
    {
        var i;
        for (i = 0; i<program.length; i++)
        {
            if (program[i][S]==state && program[i][X]==data[index])
            {
                state = program[i][S2];
                data[index] = program[i][X2]
                index+= parseInt(program[i][M]);

                data.splice(index,0,"Z");

                if (data[data.length-1]!="*")
                {
                    data.push("*");
                }
                if (data[0]!="*")
                {
                    data.unshift("*");
                    index++;
                }
                document.getElementById("out").value+=state+": "+data+"rn";

                data.splice(index,1);

                break;
            }
        }

        if (i==program.length)
            break;
    }

    document.getElementById("out").value+="Done.rn";
}

</script>

 
Yegorchic ©
 
(2006-03-22 23:38)
[0]

Здравствуйте! Не подскажите, как можно «сохранить» компонент (записать в переменную типа string, например)? Т.е. как он в .dfm записывается — так же.


 
Джо ©
 
(2006-03-23 01:04)
[1]

TStream.WriteComponent
+
ObjectBinaryToText


 
Джо ©
 
(2006-03-23 01:09)
[2]

В таком, примерно, духе:

function ComponentToText (AComponent: TComponent): string;
var
 BinaryStream: TMemoryStream;
 StringStream: TStringStream;
begin
 BinaryStream := TMemoryStream.Create;
 try
   BinaryStream.WriteComponent(AComponent);
   StringStream := TStringStream.Create("");
   try
     BinaryStream.Position := 0;
     ObjectBinaryToText(BinaryStream,StringStream);
     Result := StringStream.DataString;
   finally
     StringStream.Free;
   end;
 finally
   BinaryStream.Free;
 end;
end;

Использование:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(ComponentToText(Self));
end;


 
TUser ©
 
(2006-03-23 07:05)
[3]

Есть еще компонент TJvFormStorage — позволяет сохранять (и загружать) свойства компонентов в ini файл или реестр.


 
Yegorchic ©
 
(2006-03-23 11:55)
[4]

Класс!!! Спасибо большое!!!


 
Yegorchic ©
 
(2006-03-27 23:05)
[5]

А теперь возник немного другой вопрос: как «открыть» компонент? Надо использовать ReadComponent что-ли? Я чего-то запутался…


 
Yegorchic ©
 
(2006-03-28 19:03)
[6]

Подскажите пожалуйста!
Я делаю так:

1. Сначала пишу тексте в StringStream (ну до этого создаю естественно всё):

StringStream.WriteString(text);

2. Потом использую ObjectTextToBinary:

ObjectTextToBinary(StringStream, BinaryStream);

3. И потом делаю так, что бы записать всё это дело назад в компонент:

result:=BinaryStream.ReadComponent(AComponent);

В Run-Time при открытии вылезает ошибка:

EParserError: «OBJECT expected on line 1»

Что такое?


 
Джо ©
 
(2006-03-28 19:31)
[7]

procedure ReadComponentPropertiesFromText (AComponent: TComponent; AText: string);
var
 BinaryStream: TMemoryStream;
 StringStream: TStringStream;
begin
 StringStream := TStringStream.Create(AText);
 try
   BinaryStream := TMemoryStream.Create;
   try
     ObjectTextToBinary(StringStream,BinaryStream);
     BinaryStream.Position := 0;
     BinaryStream.ReadComponent(AComponent);
   finally
     BinaryStream.Free;
   end;
 finally
   StringStream.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
begin
 S := ComponentToText(Button1);
 ShowMessage(S);
 ReadComponentPropertiesFromText(Button1,S);
end;

Но все это не так просто, как может показаться…


 
Yegorchic ©
 
(2006-03-28 20:04)
[8]

Спасибо!

Т.е. функция BinaryStream.ReadComponent(AComponent) сразу записывает все параметры в компонент? А зачем тогда она ещё может возвращать TComponent?


 
Джо ©
 
(2006-03-28 20:14)
[9]

> [8] Yegorchic ©   (28.03.06 20:04)
> А зачем тогда она
> ещё может возвращать TComponent?

Затем, что в качестве параметра для (AComponent) ты можешь задать nil. В этом случае класс компонента будет прочитан из потока, функция создаст компонент этого класса и возвратит его. Если же параметр не будет nil, то функция просто его возвратит. В общем, смотри исходники, в частности, метод TReader.ReadRootComponent(Root: TComponent): TComponent (Classes.pas):

     if Root = nil then
     begin
       Result := TComponentClass(FindClass(ReadStr)).Create(nil);
       Result.Name := ReadStr;
     end else
     begin
       Result := Root;
       ...
     end;


 
Yegorchic ©
 
(2006-03-28 20:19)
[10]

Вроде понял!!! Спасибо большое!!! Теперь у меня всё работает!!!


 
Yegorchic ©
 
(2006-03-28 21:56)
[11]

Нет, не совсем ещё всё работает.
Компоненты, которые я, читая из файла, создавал в Run-Time — все хорошо создаются и работают.

Но тут мне пришлось сохранить компонент, который я создал в Design-Time — он сохранился. Но когда я его стал открывать, то мне вылезла ошибка о том, что компонент с таким именем уже существует! Как же тут быть?

Вы случайно не эту проблему имели ввиду, когда писали:
«Но все это не так просто, как может показаться…»

Я вот что-то сбился: функция BinaryStream.ReadComponent(AComponent) не должна создавать новый компонент, она должна же изменить AComponent! Почему так происходит-то? И судя по примеру, который Вы привели в [7] такого быть не должно!


 
Джо ©
 
(2006-03-28 23:09)
[12]

> [11] Yegorchic ©   (28.03.06 21:56)
> Вы случайно не эту проблему имели ввиду, когда писали:
> «Но все это не так просто, как может показаться…»

Это. В том числе.


> Я вот что-то сбился: функция BinaryStream.ReadComponent(AComponent)
> не должна создавать новый компонент, она должна же изменить
> AComponent!

Представь такую ситуацию. Сериализуешь ты форму, а на ней лежит, допустим, кнопка. Когда ты опять пытаешься десериализовать эту форму из потока, он пытается создать и кнопку, лежащую на ней. И задает ей имя, то, которое уже есть. Т.е:
procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
begin
 S := ComponentToText(Self);
 ShowMessage(S); // посмотри внимательно на текст.
 ReadComponentPropertiesFromText(Self,S);
end;

приведет к исключению «A component named Button1 already exists».


 
Yegorchic ©
 
(2006-03-28 23:36)
[13]

Да, это я понял, но что тогда в таком случае делать? Мне надо сохранить в файл все свойства обеъкта (TEdit, например), а потом их «открыть». Edit уже создан и что тогда делать?


 
Yegorchic ©
 
(2006-03-28 23:39)
[14]

А хотя я вроде понял…


 
Yegorchic ©
 
(2006-03-29 14:47)
[15]

Нет, всё так и не работает. Мне так и не удалось реализовать [13] :(


 
Джо ©
 
(2006-03-29 17:08)
[16]

Честно говоря, не совсем, видимо, понял, чего нужно добиться.

Вот так же работает?
procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
begin
 // "запоминаем" состояние компонента
 S := ComponentToText(Edit1);
 // изменяем его
 Edit1.Text := "123";
 // пауза
 Repaint;
 Sleep (1000);

 // восстанавливаем
 ReadComponentPropertiesFromText(Edit1,S);
end;


 
Yegorchic ©
 
(2006-03-29 17:45)
[17]

Ну да, это работает.
Может, проблема в том, что у меня в сохраняемом компоненте есть другие компоненты? Но в ошибки при открытии ничего о них не говорится…


 
Джо ©
 
(2006-03-29 17:58)
[18]

Приведи конкретный код, который ты хочешь сделать рабочим, а то так и будем вокруг да около топтаться :-)


 
Yegorchic ©
 
(2006-03-29 19:02)
[19]

Код не очень маленький, и может показаться Вам немного странным :-)

Дело в том, что я пишу небольшую программу с использованием GLScene (наверное знаете — оболочка, так сказать, для OpenGL). В процессе работы с программой требуется сохранить саму сцену со всеми объектами на ней (конечно, в GLScene предусмотрена функция сохранения сцены, но она плохо сделана (это не только моё мнение) — поэтому пришлось писать самому).
Сама сцена при старте программы пустая — присутствуют только две камеры (созданные как раз в Design-Time). Во время работы с программой на этой сцене создаются объекты (в RunTime, естественно).
Когда дело доходит до сохранения, то я сохраняю все объекты созданные в Run-Time + те самые 2 камеры — всё сохраняется. Как дело доходит до открытия сцены (программа уже перезапущена, естественно), то все объекты созданные в Run-Time очень хорошо и правильно открываются, но когда дело доходит до тех двух камер — программа выдаёт ту самую ошибку о том, что такое объект уже существует!
Да, чуть не забыл сказать — в одной из камер находится источник света (ну он тоже как компонент). Но он тут не причём я думаю.

Да, действительно такие объекты (эти две камеры) уже существуют, но при использовнии фунции BinaryStream.ReadComponent(), если параметр не nil, должен просто измениться компонент, а не создаваться новый! Такое же не происходит с TEdit»ом, например!


 
Yegorchic ©
 
(2006-03-29 20:57)
[20]

Джо, кажется почти мне стало ясно в чём дело: у меня же две камеры — в одной есть источник света (ну как компонент), и эта камера «открывалась» первой. На этом месте, соответственно, процесс открытия остановился.
Я решил оставить для открытия только одну камеру — вторую, в которой ничего нет. Она открылась. Т.е. те компоненты, у которых нет child»ов — хорошо открываются.

Что же тогда делать с компонентами, которые принадлежат ещё какие-то компоненты — они не открываются!


 
Старик
 
(2006-03-30 09:10)
[21]

Yegorchic:
>>Что же тогда делать с компонентами, которые принадлежат ещё какие-то компоненты — они не открываются!

Ясно, что делать. Смотрим, есть ли у этого компонента другие, принадлежащие к нему, и если есть, то их сохраняем тем же макаром.
Обычно за это отвечает свойство Parent/Owner.
Свойство Owner у некоторого компонента обычно заявляет о том, что этот компонент просто ЛЕЖИТ на другом компоненте — например, метка на TPanel. Свойство Parent обычно заявляет о том, что компонент с этим свойством создается родительским компонентом (обозначенным в свойстве Parent) и им же убивается. Так что делаем следующим образом:
Сохраняем главный компонент. Затем ищем все компоненты, у которых в свойстве Parent проставлен главный компонент, и тоже их сохраняем.

P.S.: Писал на скорую руку, возможны ошибки. Если что, поправьте меня.


 
Yegorchic ©
 
(2006-03-30 14:09)
[22]


> Сохраняем главный компонент. Затем ищем все компоненты,
> у которых в свойстве Parent проставлен главный компонент,
>  и тоже их сохраняем.

Да, но когда я сохраняю главный компонент — все компоненты, которые принадлежат ему сохраняются вместе с ним! Или может я чего-то не понимаю… :


2022-07-19_210334.jpg.6171bb68a09ff8f49702f2e2247e36f1.jpg

In my project ,some form works well with unigui1561  manby older.

but now with unigui1563,when I  call the form,

I will have the error,why?

  • Remove From My Forums
  • Question

  • Hi all

    i have created an html file with javascript & DOM embedded into it !!! I have just tried to validate an XML file against a schema. But everytime i click on the llink ‘Validate’ , i get an error : ‘object required’

    i have made a call to the javascript function frm the html anchor tag… like

    <a hrefjavascript:doValidate()«>Validate</a>

    also i have tried : <a href=»#» onclick=»javascript:doValidate()»>Validate</a>

    For further reference here is my code :
    <html> <head><title>Untitled Document</title>
    <script languagejavascript«>
    var newWindow;


    function doValidate()
    {

       if((document.frmTransform.TxtXMLFileName.value).length== 0)
       {
           alert(«Invalid XML File Name»);
           return;
       }
      if((document.frmTransform.TxtXSDFileName.value).length
    == 0)
      {
           alert(«Invalid XSD File Name»);
           return;
       } 
      var xmldoc
    = new ActiveXObject(«Msxml2.FreeThreadedDOMDocument.6.0»);
      xmldoc.async
    = false;
      xmldoc.load(document.frmTransform.TxtXMLFileName.value);
      var ns
    = xmldoc.documentElement.namespaceURI;
      xmldoc.validateOnParse
    = true;   
      var xsddoc
    = new ActiveXObject(«Msxml2.XMLSchemaCache.6.0»);
      xsddoc.add(ns,document.frmTransform.TxtXSDFileName.value); 
      xmldoc.schemas
    = xsddoc;
      xmldoc.load(document.frmTransform.TxtXMLFileName.value); 
      var error
    = xmldoc.parseError;  
       newWindow
    = window.open(‘Activity1.html’, ‘_new’, ‘location=0,status=1, toolbar=0, menubar= 0, scrollbars=0, directories=0,   resizable=0, width=600, height=600′);  
     
      if(error !
    = » «) 
      {
        newWindow.document.write(‘
    <html> <head> <title>Schema Validator</title> </head> <body> 
                                                <p><b>Error validating the document</b></p> <br>‘);  
        newWindow.document.write(‘
    <b>Error URL: </b> <br>‘ + error.url + ‘<br>‘);  
        newWindow.document.write(‘
    <b>Error Line: </b> <br>‘ + error.line + ‘<br>‘);  
        newWindow.document.write(‘
    <b>Error Position: </b> <br>‘ + error.linepos + ‘<br>‘);  
        newWindow.document.write(‘
    <b>Error Reason: </b> <br>‘ + error.reason + ‘<br>‘);  
        newWindow.document.write(‘
    </body> </html>‘);
       }
       else
       {
         newWindow.document.write(‘
    <html> <head> <title>Schema Validator</title> </head> 
                                                 <body><b>No Error</b></body> </html>‘); 
         }

    function doReset()
    {
        document.frmTransform.TxtXMLFileName.value

    =» «;
        document.frmTransform.TxtXSDFileName.value
    =» «;
        if(!(typeof newWindow
    == «undefined»))
            newWindow.close();
    } 
    </script> 
    </head>  

    and after this within the body tag i have designed an interface ,, which also contains link buttons of ‘Validate’ and ‘Reset’ !!!
    I am using Windows XP SP 2 and IE 7.

    Any help on this ?????

    • Moved by

      Friday, September 18, 2009 5:04 PM
      (From:CRM)

Answers

  • That error normally happens if you have a syntax error in your code. I don’t use anchor tags to run client script — I suggest using a span element as follows, and removing the javascript: protocol marker

    <span onclick=»doValidate()»>Validate</span>


    Microsoft CRM MVP — http://mscrmuk.blogspot.com  http://www.excitation.co.uk

    • Marked as answer by
      DavidJennawayMVP, Moderator
      Tuesday, December 1, 2009 10:45 AM

  • Remove From My Forums
  • Вопрос

  • Help!  After start-up   I get this message/warning     error object expected on line 1     Anything I can do about that?  Thanks for your time!

Понравилась статья? Поделить с друзьями:
  • Ошибка oauth что это такое
  • Ошибка oauth error code is invalid or expired
  • Ошибка nw 6 403 netflix на телевизоре что делать
  • Ошибка nw 31374 8 на ps4
  • Ошибка nw 31246 6 ps4