Procedure formcreate sender tobject ошибка

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);  //тут ошибку выдает
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
    vopros: array[1..7] of string = ('Компонент, который управляет программой',
   'Компонент в котором отображается текстовая информация',
    'Это назначение есть у  всех компонентов, его свойство Font',
     'Компонент, предназначенный для выбора/установления функции',
    'Color-это..?', 'Набор однородных элементов, расположенных друг под другом последовательно - это..?',
     'Что за назначение у компонента String Grid со свойством Salse?');
    mas: array[1..7] of string = ('кнопка', 'таблица', 'шрифт', 'флажок',
    'цвет', 'список', 'ячейки');
      //заполненны сразу массив
 
  GroupBox: TGroupBox; //динамическая GroupBox
  i: Byte; //для цикла
  slmas: Integer; //слово, то есть случайный элемен массива
  pvsyg: Integer; //правильно угаданные все (так как буквы повторятся в слове)
  kolp: Byte; //для кол-ва попыток
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  // выбор случайного слова (случайного элемента массива)
  slmas := 1 + Random(7);
  Label1.Caption := 'Допустимо не более 5 ошибок )';
 
 
  // обнулим переменные что для подсчета
  pvsyg := 0;
  kolp:= 0;
 
    GroupBox := TGroupBox.Create(Self);
  with GroupBox do
  begin
    Name := 'GroupBox';
    Parent := Self;
    Left := 10;
    Top := 10;
    Width := 438;
    Height := 80;
    Font.Size := 10;
    Caption := 'Компьютер загадал слово из ' + IntToStr(Length(mas[slmas])) +
      ' букв';
  end;
 
  LabelVopros.Caption := vopros[slmas];
 
    for i := 1 to Length(mas[slmas]) do
    with TPanel.Create(Self) do
    begin
      Left := 40 * i;
      Top := 24;
      Width := 35;
      Height := 41;
      Font.Size := 16;
      Visible := False; //скроем пока на время
      Caption := mas[slmas][i]; //раздадим слово по буквам из массива
      Parent := GroupBox;
    end;
 
  for i := 1 to Length(mas[slmas]) do
    with TBevel.Create(Self) do
    begin
      Left := 40 * i;
      Top := 24;
      Width := 35;
      Height := 41;
      Style := bsRaised;
      Parent := GroupBox;
    end;
 
  //==============================================================================
  // Восстановим в цикле все кнопки для нажатий
  //==============================================================================
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TButton then
      (Components[i] as TButton).Enabled := True;
 
  // а эту кнопку наоборот заблокируем
  Button1.Enabled := False; //отключим на время
end;
 
procedure TForm1.Button2Click(Sender: TObject);
   var
  i: integer;
  f: boolean;
begin
  //==============================================================================
  // Все обработчики кнопок на Button2 кнопке
  //
  //==============================================================================
 
  f := False;
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TPanel then
      if (Components[i] as TPanel).Caption = (Sender as TButton).Caption then
      begin
        (Components[i] as TPanel).Visible := True;
        f := True;
        Inc(pvsyg); //инкримент для всех букв и те что повторяются в слове тоже
      end;
  if f then
    Label1.Caption := 'Молодец, угадал - ' + (Sender as TButton).Caption
  else
  begin
    Label1.Caption := 'Буквы - ' + (Sender as TButton).Caption + ' здесь нет';
    Inc(kolp); //инкримент на попытки угадать
  end;
  (Sender as TButton).Enabled := False;
 
  if pvsyg = Length(mas[slmas]) then
  begin
    Button1.Enabled := True;
    Button1.Caption := 'Новая игра?';
    ShowMessage('Угадано! ' + mas[slmas]);
    //=========================================================================
    // Слово уже угадано в цикле заблокируем все кнопки пока они ненужны
    // кроме кнопки что включит игру
    //=========================================================================
    for i := 0 to ComponentCount - 1 do
      if Components[i] is TButton then
        (Components[i] as TButton).Enabled := False;
 
    Button1.Enabled := True; //а эту снова включим
  end;
  Caption := 'Открыто ' + IntToStr(pvsyg) + ' букв из ' +
    IntToStr(Length(mas[slmas]));
 
  if kolp = 5 then
  begin
 MessageBox(Handle, PAnsiChar( 'Вы проиграли, названо 5 неправильных букв, ' + #13#10 +
   'компьютер загадал - ' + mas[slmas]), 'Справка', MB_OK + MB_ICONINFORMATION);
 
 
       for i := 0 to ComponentCount - 1 do
      if Components[i] is TButton then
        (Components[i] as TButton).Enabled := False;
 
    Button1.Enabled := True; //а эту снова включим
    Button1.Caption := 'Новая игра?'; //и переименуем
    Label1.Caption:= 'Для старта игры- нажмите новая игра!';
  end;
end;
 
end.
//удалить групбокс
for i := ComponentCount - 1 downto 0 do
  if Components[i] is TGroupBox then
    Components[i].Free;
 
//включить все кнопки
for i := 0 to ComponentCount - 1 do
  if Components[i] is TButton then
    (Components[i] as TButton).Enabled := True;
 
end;
 
end.
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize; //для рандома
  Button1.Click; //загрузим игру сразу при запуске
  Button1.Caption := 'Игра загружена!';
  Button1.Enabled := False; //сменить слово нельзя
end;
 
end.

Topic: [SOLVED] (53,12) Fatal: Syntax error, «;» expected but «identifier TFORM1» found  (Read 8811 times)

Continuing my quest….

I was creating a test to see if I finally got a grip on all this.  Guess not… :(

I didn’t change TFORM1… :-[

  1. unit UnitRecTest;

  2. {$mode objfpc}{$H+}

  3. interface

  4. uses

  5.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

  6. type

  7. { TForm1 }

  8.   TForm1 = class(TForm)

  9.     Edit1: TEdit;

  10.     Label1: TLabel;

  11. procedure Edit1Change(Sender: TObject);

  12. private

  13. { private declarations }

  14. public

  15. { public declarations }

  16. end;

  17. var

  18.   Form1: TForm1;

  19.   code_str : string[28];  

  20.   masterrec : record

  21.                 status    : longint;

  22.                 shortname : string[8];

  23. //           company   : code_str;

  24.                 address   : string[28];

  25.                 city      : string[28];

  26.                 state     : string[2];

  27.                 zip       : string[10];

  28.                 POC       : string[28];

  29.                 tele      : string[18];

  30.                 shcomp    : string[28];

  31.                 shaddr    : string[28];

  32.                 shcity    : string[28];

  33.                 shstate   : string[2];

  34.                 shzip     : string[10];

  35. end;

  36. implementation

  37. {$R *.lfm}

  38. { TForm1 }

  39. begin

  40. procedure TForm1.Edit1Change(Sender: TObject);      //  ‘TFORM’ error on this line

  41. begin

  42.     Edit1.Text:=masterrec.shortname;

  43. end;

  44.   masterrec.shortname := ‘Blake’;

  45. end.

The compiler doesn’t like code_str, either.

Other than that, I am having fun!!  :D

Thanks!!

« Last Edit: September 19, 2016, 10:56:49 pm by WickedDum »


Logged

Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0


Remove the statement «begin» in line 51 and you get a bit further ;-)


Logged


Thanks, Molly.

And take that BEGIN and insert it between lines 56 and 57.  It compiles!  It was a basic Pascal program structure error.   :-[

But

  1. Edit1.Text:=masterrec.shortname;

does not display ‘Blake’.  Any idea why not?

Thanks!


Logged

Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0


does not display ‘Blake’.  Any idea why not?

Hmz, strange that it even compiles as such.

Do you mind if i don’t answer the why but, instead  provide two solutions ?

Solution 1:
Add an initialization section to your unit and place the initialization of your record field(s) in there.

Solution 2:
Implement the form event .formcreate (you can use the object inspector for that, select your form and click the events tab. In there is an event named onCreate. Double click the empty event filed to automatically let Lazarus create the code for this event inside your source. In that event (between the begin/end pair) initialize your record field(s).

edit:
For more information about structural organization of a unit, please read up inside the manual or on the wiki. That will also explain the initialization section and where to place.

« Last Edit: September 19, 2016, 09:17:09 am by molly »


Logged


Hmz, strange that it even compiles as such.

It should compile! :D   Why are you surprised that it compiles?  I just think it is strange because it does not display ‘Blake’.

Do you mind if i don’t answer the why but, instead  provide two solutions ?

I don’t mind…but I would like to know.  I believe you are leaning toward the lack of (proper/complete?) initialization?  Although, I believe masterrec.shortname is initialized…   %)

Solution 1:
Add an initialization section to your unit and place the initialization of your record field(s) in there.

If I understand you correctly, you just want me to initialize the record.  There is no Pascal ‘initialization’ section, correct?

Solution 2:  …select your form and click the events tab…

I just double-clicked on the form itself and the template for TForm1.FormCreate was written.  Is that where you want me to initialize everything?  And, in the Events section, (none), FormCreate, and EditChange1 are the only options.  Which one to I select?  None appear to actually do anything…

I read the reference.  Thanks.  (Disregard INITIALIZATION concerns.)

Any idea why the compiler doesn’t like code_str?

Thanks for your time and suggestions!

« Last Edit: September 19, 2016, 09:45:41 am by WickedDum »


Logged

Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0


Hmz, strange that it even compiles as such.

It should compile! :D   Why are you surprised that it compiles?  I just think it is strange because it does not display ‘Blake’.

It is strange as you have some code in the middle of an implementation section. afaik it should generate an error during compilation.

Do you mind if i don’t answer the why but, instead  provide two solutions ?

I don’t mind…but I would like to know.  I believe you are leaning toward the lack of (proper/complete?) initialization?  Although, I believe masterrec.shortname is initialized…   %)

Because the routine that initialized the field of the record isn’t called so your record field isn’t initialized either.

Solution 1:
Add an initialization section to your unit and place the initialization of your record field(s) in there.

If I understand you correctly, you just want me to initialize the record.  There is no Pascal ‘initialization’ section, correct?

There is, see also the links i put up in my edited post.

Solution 2:  …select your form and click the events tab…

I just double-clicked on the form itself and the template for TForm1.FormCreate was written.

Good :-)

Is that where you want me to initialize everything?

For learning purpose and you getting familair with things, yes. Later on the initialization of such record fields should belong to an event that is properly suited. You are not able to tell yet at this point in time.

If i do something like this, i add a button on a form and place my init code inside its onclick event in order to check if everything works as expected, then when a program matures, i place that code in an event that is more suited to the program.

And, in the Events section, (none), FormCreate, and EditChange1 are the only options.  Which one to I select?  None appear to actually do anything…

For storing a value inside your recrod field ? If yes, then inside the FormCreate event.

« Last Edit: September 19, 2016, 09:57:59 am by molly »


Logged


Oh, and something else….

You have it programmed now that in case user types something into edit1 that the same text of that edit box is changed to that what is stored inside your record field.

That is a bit awkward to say the least. You type something and then the text you type is being replaced. Not even sure if it works that way.


Logged


Any idea why the compiler doesn’t like code_str?

No idea. what is the error that the compiler tells you when you try to compile ?

edit: i bet you get a type error ;-p

You are trying to declare the type of a record field, but instead you assign it a variable.

« Last Edit: September 19, 2016, 10:08:15 am by molly »


Logged


And here some code that shows both ways of doing intialization.

Keep in mind though that indeed the moment you type something into the edit1 that the edit field text is changed into Blake (no matter what you type).

  1. unit Unit1;

  2. {$mode objfpc}{$H+}

  3. interface

  4. uses

  5.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

  6. type

  7. { TForm1 }

  8.   TForm1 = class(TForm)

  9.     Edit1: TEdit;

  10.     Label1: TLabel;

  11. procedure Edit1Change(Sender: TObject);

  12. procedure FormCreate(Sender: TObject);

  13. private

  14. { private declarations }

  15. public

  16. { public declarations }

  17. end;

  18. type

  19.   code_str = string[28];

  20. var

  21.   Form1: TForm1;

  22. //  code_str : string[28];

  23.   masterrec :

  24. record

  25.     status    : longint;

  26.     shortname : string[8];

  27.     company   : code_str;

  28.     address   : string[28];

  29.     city      : string[28];

  30.     state     : string[2];

  31.     zip       : string[10];

  32.     POC       : string[28];

  33.     tele      : string[18];

  34.     shcomp    : string[28];

  35.     shaddr    : string[28];

  36.     shcity    : string[28];

  37.     shstate   : string[2];

  38.     shzip     : string[10];

  39. end;

  40. implementation

  41. {$R *.lfm}

  42. { TForm1 }

  43. procedure TForm1.Edit1Change(Sender: TObject);

  44. begin

  45.   Edit1.Text := masterrec.shortname;

  46.   Label1.Caption := masterrec.address;

  47. end;

  48. procedure TForm1.FormCreate(Sender: TObject);

  49. begin

  50.   masterrec.shortname := ‘Blake’;

  51. end;

  52. Initialization

  53. begin

  54.   masterrec.address := ‘Planet earth’;

  55. end;

  56. end.

That should compile for you.


Logged


@molly — Thank you very much for your time.  I understand your posts. 

As for ‘Blake’ overwriting what is entered, I intended it only as a test to see if I assigned the edit1.text correctly.  It didn’t display for me so that told me I failed.  :(    But it was only there as an in-house quick little test..

Thank you for your time and assistance (and code)!!!    :)


Logged

Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0


Oops…

The DEN error and, when I click continue, then:

Error reading Form1.OnCreate: Invalid value for property.

« Last Edit: September 19, 2016, 11:20:10 pm by WickedDum »


Logged

Practice Safe Computing!!

Intel i5-4460K @ 3.2GHz | Win8.1 64-bit | FPC: v3.0 | Lazarus:  v1.6.0


>
Access Violation at address при загрузке дочерней формы

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему

  


Сообщ.
#1

,
13.03.08, 07:02

    Может мой вопрос покажется «ламерским» :whistle: но может кто нибудь сталкивался с такой проблемой.
    Когда вызываю из главной формы дочернюю форму:

    ExpandedWrap disabled

      implementation

       uses Unit2;

      procedure TForm1.CustomItem4Click(Sender: TObject);

      begin

      form2:=tform2.Create (self);

      end;

    то вылетают следующие ошибки
    Ошибка: Access Violation at address xxxxxxxx in module ‘XXXXXXX.exe’. Read of address xxxxxxxx.,
    xxxxxxxx — любые значения адреса,
    или
    Ошибка: External Exception C000001D.
    после чего приходится нажимать ОК и только после этого создается дочернее окно и в конце концов всё это виснет.
    Дочернюю форму закрываю так:

    ExpandedWrap disabled

      procedure TForm2.SCButton1Click(Sender: TObject);

      begin

      close;

      end;

      procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

      begin

      action:=cafree;

      end;

      procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

      begin

       canclose:=true;

      end;

    Как можно обойти данную проблему :(
    Подскажите плз.. Если можно то с примерами…


    vladimir74



    Сообщ.
    #2

    ,
    13.03.08, 07:28

      добавь еще проверку, скорее всего эта форма уже существует…

      ExpandedWrap disabled

        procedure TForm1.CustomItem4Click(Sender: TObject);

        begin

          if not assigned(form2) then

            form2:=tform2.Create (self);

          form2.Show();

        end;

      ну и закрывай ….

      ExpandedWrap disabled

        procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

        begin

             Action := caFree;

             Form2 := nil;

        end;


      Felan



      Сообщ.
      #3

      ,
      13.03.08, 10:12

        А еще лучше не проверку делать, а в свойствах проекта убрать форму, которая только динамически создается/уничтожается из автосоздания.


        Demon:-)

          


        Сообщ.
        #4

        ,
        14.03.08, 08:03

          Цитата Felan @ 13.03.08, 10:12

          А еще лучше не проверку делать, а в свойствах проекта убрать форму, которая только динамически создается/уничтожается из автосоздания.

          Это интересно как? :huh: Как можно реализовать Ваш пример.

          -Added 14.03.08, 08:14

          Цитата vladimir74 @ 13.03.08, 07:28

          добавь еще проверку, скорее всего эта форма уже существует…

          ExpandedWrap disabled

            procedure TForm1.CustomItem4Click(Sender: TObject);

            begin

              if not assigned(form2) then

                form2:=tform2.Create (self);

              form2.Show();

            end;

          ну и закрывай ….

          ExpandedWrap disabled

            procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

            begin

                 Action := caFree;

                 Form2 := nil;

            end;

          Да странно он уже вызывает эти ошибки как в предыдущем и новую другую ошибку

          Ошибка: Abstract error!

          В чем бага не пойму :huh:

          Сообщение отредактировано: Demon:-) — 14.03.08, 08:15


          vladimir74



          Сообщ.
          #5

          ,
          14.03.08, 08:29

            Цитата Demon:-) @ 14.03.08, 08:03

            Это интересно как? :huh: Как можно реализовать Ваш пример.

            зайди в файл проекта (project1.dpr) и убери от туда все Application.CreateForm(TForm2, Form2); кроме стартовой…

            Цитата Demon:-) @ 14.03.08, 08:03

            Да странно он уже вызывает эти ошибки как в предыдущем и новую другую ошибку
            Ошибка: Abstract error!

            непонял что и где вызывает ошибки?


            Demon:-)

              


            Сообщ.
            #6

            ,
            14.03.08, 08:33

              Цитата vladimir74 @ 14.03.08, 08:29

              Цитата Demon:-) @ 14.03.08, 08:03

              Это интересно как? :huh: Как можно реализовать Ваш пример.

              зайди в файл проекта (project1.dpr) и убери от туда все Application.CreateForm(TForm2, Form2); кроме стартовой…

              Цитата Demon:-) @ 14.03.08, 08:03

              Да странно он уже вызывает эти ошибки как в предыдущем и новую другую ошибку
              Ошибка: Abstract error!

              непонял что и где вызывает ошибки?

              А эту я сразу же надпись снёс, иначе она бы вместе с главной загружалась (а это мне ненужно ;) )

              а ошибки…

              …Ошибка: Access Violation at address xxxxxxxx in module ‘XXXXXXX.exe’. Read of address xxxxxxxx.,
              xxxxxxxx — любые значения адреса,
              или
              Ошибка: External Exception C000001D.
              после чего приходится нажимать ОК и только после этого создается дочернее окно и в конце концов всё это виснет….

              Сообщение отредактировано: Demon:-) — 14.03.08, 08:34


              vladimir74



              Сообщ.
              #7

              ,
              14.03.08, 08:41

                Demon:-)
                мне чего то кажется что у тебя ошибка где то в другом…..
                посмотри в Create и Show вызываемой формы может у тебя там что то не так… ты где то обращаешься к обьекту который в данный момент не существует (еще не создан или уже уничтожен)
                поставь в дебагере брейкпоинты в первой форме там где ты открываешь вторую, и во второй форме в методах Create и Show (если существуют) и посмотри где конкретно вылетает ошибка…


                Demon:-)



                Сообщ.
                #8

                ,
                14.03.08, 08:58

                  Цитата vladimir74 @ 14.03.08, 08:41

                  Demon:-)
                  мне чего то кажется что у тебя ошибка где то в другом…..
                  посмотри в Create и Show вызываемой формы может у тебя там что то не так… ты где то обращаешься к обьекту который в данный момент не существует (еще не создан или уже уничтожен)
                  поставь в дебагере брейкпоинты в первой форме там где ты открываешь вторую, и во второй форме в методах Create и Show (если существуют) и посмотри где конкретно вылетает ошибка…

                  вот сам дпр

                  ExpandedWrap disabled

                    program Project1;

                    uses

                      Forms,

                      Unit1 in ‘Unit1.pas’ {Form1},

                      Unit2 in ‘Unit2.pas’ {Form2};

                    …..

                    {$R *.res}

                    begin

                      Application.Initialize;

                      Application.Title := »;

                      Application.CreateForm(TForm1, Form1);

                      Application.Run;

                    end.

                  Унит1 это главная
                  Унит 2 дочка

                  Вот в Уните1 я я вызываю дочку Унит2 таким образом (в первом сообщении было описано)

                  ExpandedWrap disabled

                     form2:=tform2.Create (self);

                  вылетали ошибки, и вставил Ваш код

                  ExpandedWrap disabled

                    if not assigned(form2) then

                        form2:=tform2.Create (self);

                      form2.Show();

                  ошибки остались и возникла новая вот


                  vladimir74



                  Сообщ.
                  #9

                  ,
                  14.03.08, 09:01

                    ах да может тебе вместо tform2.Create(self) создавать tform2.Create(Application) ?
                    разница между вызовами описана в DRKB кстати очень рекомендую….

                    Добавлено 14.03.08, 09:11
                    Demon:-)
                    что к тебя происходит в form2.FormCreate(Sender: TObject) ?

                    я только что сделал проект (пятница подействовала)

                    ExpandedWrap disabled

                      program Project1;

                      uses

                        Forms,

                        Unit1 in ‘Unit1.pas’ {Form1},

                        Unit2 in ‘Unit2.pas’ {Form2};

                      {$R *.res}

                      begin

                        Application.Initialize;

                        Application.CreateForm(TForm1, Form1);

                        Application.Run;

                      end.

                    ExpandedWrap disabled

                      unit Unit1;

                      interface

                      uses

                        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

                        Dialogs, StdCtrls;

                      type

                        TForm1 = class(TForm)

                          Button: TButton;

                          procedure ButtonClick(Sender: TObject);

                        private

                          { Private-Deklarationen }

                        public

                          { Public-Deklarationen }

                        end;

                      var

                        Form1: TForm1;

                      implementation

                      uses

                        Unit2;

                      {$R *.dfm}

                      procedure TForm1.ButtonClick(Sender: TObject);

                      begin

                      if not assigned(form2) then

                          form2:=tform2.Create(self);

                        form2.Show();

                      end;

                      end.

                    ExpandedWrap disabled

                      unit Unit2;

                      interface

                      uses

                        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

                        Dialogs, StdCtrls;

                      type

                        TForm2 = class(TForm)

                          Edit: TEdit;

                          procedure FormClose(Sender: TObject; var Action: TCloseAction);

                        private

                          { Private-Deklarationen }

                        public

                          { Public-Deklarationen }

                        end;

                      var

                        Form2: TForm2;

                      implementation

                      {$R *.dfm}

                      procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

                      begin

                           Action := caFree;

                           Form2 := nil;

                      end;

                      end.

                    у меня никаких ошибок нет, следовательно я так понимаю проблема ни в самом открытии а в том что ты при этом открытии делаешь дополнительно. Пройдись дебагером от начала создания до конца открытия формы…


                    AnalogXP



                    Сообщ.
                    #10

                    ,
                    14.03.08, 09:58

                      Full Member

                      ***

                      Рейтинг (т): 8

                      Вот так совпадение. Прям сейчас с той же проблемой сталкнулся. Код точно такой же.
                      AV появляется если я в TForm2.FormCreate хочу задать этой же форме позицию на экране или же присвоить ей другие значения.

                      ExpandedWrap disabled

                        Ini := TIniFile.Create(ShellDir(‘AppData’)+’LinkCollectorConfig.ini’);

                            try

                               form2.Top:=ini.ReadInteger(‘Program’,’Top’, 100); // Если эти две сторочки убать

                               form2.Left:=ini.ReadInteger(‘Program’,’Left’,100); // то проблема исчезает

                            finally

                             ini.Free;

                            end;

                      Но как в таком случае регулировать ее позицию?

                      Все вроде, решил проблему заменив код создания формы с

                      ExpandedWrap disabled

                               if not assigned(form2) then

                                    form2:=tform2.Create(self);

                               form2.Show;

                      на этот

                      ExpandedWrap disabled

                               if not assigned(form2) then

                                    Application.CreateForm(TForm2, Form2);

                               Form2.Show;

                      Сообщение отредактировано: AnalogXP — 14.03.08, 10:13


                      Demon:-)



                      Сообщ.
                      #11

                      ,
                      14.03.08, 10:46

                        Цитата AnalogXP @ 14.03.08, 09:58

                        Вот так совпадение. Прям сейчас с той же проблемой сталкнулся. Код точно такой же.
                        AV появляется если я в TForm2.FormCreate хочу задать этой же форме позицию на экране или же присвоить ей другие значения.

                        ExpandedWrap disabled

                          Ini := TIniFile.Create(ShellDir(‘AppData’)+’LinkCollectorConfig.ini’);

                              try

                                 form2.Top:=ini.ReadInteger(‘Program’,’Top’, 100); // Если эти две сторочки убать

                                 form2.Left:=ini.ReadInteger(‘Program’,’Left’,100); // то проблема исчезает

                              finally

                               ini.Free;

                              end;

                        Но как в таком случае регулировать ее позицию?

                        Все вроде, решил проблему заменив код создания формы с

                        ExpandedWrap disabled

                                 if not assigned(form2) then

                                      form2:=tform2.Create(self);

                                 form2.Show;

                        на этот

                        ExpandedWrap disabled

                                 if not assigned(form2) then

                                      Application.CreateForm(TForm2, Form2);

                                 Form2.Show;

                        да реально «тупость» почему-то дочерней форме нельзя задавать размер :wall:

                        Вызывает ошибку вот эта запись: :whistle:

                        ExpandedWrap disabled

                          procedure TForm2.FormCreate(Sender: TObject);

                          begin

                          form2.Width:=540;

                          form2.Height:=360;

                          end;

                        гы :lol: комментируешь и всё работает :lol:
                        так

                        ExpandedWrap disabled

                          procedure TForm2.FormCreate(Sender: TObject);

                          begin

                          //form2.Width:=540;

                          //form2.Height:=360;

                          end;

                        всем псб… ;)


                        leo



                        Сообщ.
                        #12

                        ,
                        14.03.08, 11:31

                          AnalogXP, Demon:-)
                          Ну вы и чудаки, однако :D
                          Кто же в FormCreate обращается к «левой» переменной form2 ?! Нужно же с self работать, т.е. просто писать

                          ExpandedWrap disabled

                            procedure TForm2.FormCreate(Sender: TObject);

                            begin

                              {form2.}Width:=540;

                              {form2.}Height:=360;

                            end;

                          PS. Вот вам и разница между TForm2.Create и Application.CreateForm:
                          TForm2.Create вызывает TObject.NewInstance, затем Create и FormCreate, и только после этого происходит присвоение значения переменной form2. Т.е. во время выполнения FormCreate form2 еще не присвоено и = Nil !!!
                          А вот Application.CreateForm вызывает TObject.NewInstance, сразу присваивает значение form2 и только после этого вызывает Create и FormCreate с уже установленным значением form2

                          Сообщение отредактировано: leo — 14.03.08, 11:36

                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                          0 пользователей:

                          • Предыдущая тема
                          • Delphi: Общие вопросы
                          • Следующая тема

                          [ Script execution time: 0,1113 ]   [ 16 queries used ]   [ Generated: 9.06.23, 02:00 GMT ]  

                          Модератор: Модераторы

                          Ошибка Fatal: Syntax error, «;» expected

                          Доброго времени суток, препод дала задание, но при компиляции программа выдает ошибку «cloud.pas(51,12) Fatal: Syntax error, «;» expected but «identifier TFORM1″ found»
                          В код никакой отсебятины не добавлялось, полное копирование из задания.

                          Код: Выделить всё
                          unit cloud;

                          {$mode objfpc}{$H+}

                          interface

                          uses
                            Classes, SysUtils, Forms, Controls, Graphics, Dialogs, FileUtil, Buttons, ExtCtrls, StdCtrls;

                          type

                            { TForm1 }

                            TForm1 = class(TForm)
                              Button1: TButton;
                              PaintBox1: TPaintBox;
                              Timer1: TTimer;
                              procedure FormCreate(Sender: TObject);
                            private
                             { private declarations }
                              //Координаты прорисовки объекта.Доступны всем процедурам класса TForm1
                              x1,y1:Integer;
                            public
                              { public declarations }
                              //Процедура прорисовки облака
                              procedure Cloud(x,y:Integer; ColorCloud:TColor);
                            end;

                          var
                            Form1: TForm1;

                          implementation

                          {$R *.lfm}

                          procedure TForm1.FormCreate(Sender: TObject);
                          begin

                          end;

                          { TForm1 }
                          procedure TForm1.Cloud(x,y:Integer; ColorCloud:TColor);
                          begin
                             //Прорисовка облака из двух эллипсов
                             with PaintBox1.Canvas do begin
                               Pen.Style:=psClear;
                               Brush.Color:=ColorCloud;
                               Ellipse(x,y,x+80,y+40);
                               Ellipse(x+30,y+10,x+100,y+50);
                          end;
                          procedure TForm1.Button1Click(Sender: TObject);
                          begin
                             //установка начальных значений
                             x1:=0;
                             y1:=50;
                             Timer.Interval:=100;
                             //прорисовка картинки по которой двигается объект
                             PaintBox1.Canvas.Brush.Color:=clBlue;
                             PaintBox1.Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height);
                             //Включение таймера-запуск анимации
                             Timer1.Enabled:=true;
                             end;
                          end;
                          procedure TForm1.Timer1Timer(Sender: TObject);
                          begin
                            //закраска объекта цветом фона
                            Cloud(x1,y1,clBlue)
                            //изменение координат прорисовки
                            x1:=x1+1;
                            //прорисовка объекта в новом месте
                            Cloud(x1,y1,clWhite);
                            end;
                          end.

                          Очень надеюсь на вашу помощь)

                          Mire
                          незнакомец
                           
                          Сообщения: 1
                          Зарегистрирован: 03.05.2019 10:49:20

                          Re: Ошибка Fatal: Syntax error, «;» expected

                          Сообщение Awkward » 04.05.2019 12:14:19

                          Код: Выделить всё
                          procedure TForm1.Cloud(x,y:Integer; ColorCloud:TColor);
                          begin
                             //Прорисовка облака из двух эллипсов
                             with PaintBox1.Canvas do begin // <<<<< не парный begin
                               Pen.Style:=psClear;
                               Brush.Color:=ColorCloud;
                               Ellipse(x,y,x+80,y+40);
                               Ellipse(x+30,y+10,x+100,y+50);
                            end; // <<<<<<  вставить
                          end;
                          Awkward
                          новенький
                           
                          Сообщения: 43
                          Зарегистрирован: 19.01.2017 00:06:47

                          Re: Ошибка Fatal: Syntax error, «;» expected

                          Сообщение iskander » 04.05.2019 12:29:38

                          И еще вот здесь:

                          Код: Выделить всё
                          procedure TForm1.Button1Click(Sender: TObject);
                          begin
                             //установка начальных значений
                             x1:=0;
                             y1:=50;
                             Timer.Interval:=100;
                             //прорисовка картинки по которой двигается объект
                             PaintBox1.Canvas.Brush.Color:=clBlue;
                             PaintBox1.Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height);
                             //Включение таймера-запуск анимации
                             Timer1.Enabled:=true;
                             //end; <-------- убрать лишний end
                          end;
                          iskander
                          энтузиаст
                           
                          Сообщения: 543
                          Зарегистрирован: 08.01.2012 18:43:34

                          Re: Ошибка Fatal: Syntax error, «;» expected

                          Сообщение VirtUX » 05.05.2019 11:27:40

                          Mire писал(а):procedure TForm1.Timer1Timer(Sender: TObject);
                          begin
                          //закраска объекта цветом фона
                          Cloud(x1,y1,clBlue); <—- тут пропустили «;»
                          //изменение координат прорисовки
                          x1:=x1+1;
                          //прорисовка объекта в новом месте
                          Cloud(x1,y1,clWhite);
                          end;

                          Аватара пользователя
                          VirtUX
                          энтузиаст
                           
                          Сообщения: 878
                          Зарегистрирован: 05.02.2008 10:52:19
                          Откуда: Крым, Алушта


                          Вернуться в Lazarus

                          Кто сейчас на конференции

                          Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

                          Когда я пытаюсь добавить в делфи Form2.ShowModal; пишет ошибку: «Undeclared identifier ‘Form2’ at (указывает линию)»

                          Вот код unit1:

                          unit Unit1;
                          
                          interface
                          
                          uses
                            Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
                            Vcl.Controls, Vcl.Forms, Vcl.Dialogs, GifImg, Vcl.ExtCtrls, Vcl.StdCtrls;
                          
                          type
                            TForm1 = class(TForm)
                              Image1: TImage;
                              Button1: TButton;
                              procedure FormCreate(Sender: TObject);
                              procedure Button1Click(Sender: TObject);
                            private
                              { Private declarations }
                            public
                              { Public declarations }
                            end;
                          
                          var
                            Form1: TForm1;
                            Gif  : TGifImage;
                          
                          implementation
                          
                          {$R *.dfm}
                          
                          procedure TForm1.Button1Click(Sender: TObject);
                          begin
                          Form1.Visible := false;
                          Form2.ShowModal;
                          end;
                          
                          procedure TForm1.FormCreate(Sender: TObject);
                          begin
                            Gif := TGifImage.Create;
                            Gif.LoadFromFile('C:UsersArtemDesktopvrr.3321videorenderUntitled.gif');
                            Gif.Animate := True;
                          
                            Image1.Picture.Assign(GIF);
                          end;
                          
                          end.

                          Код unit2(второй формы):

                          unit Unit2;
                          
                          interface
                          
                          uses
                            Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
                            Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
                          
                          type
                            TForm2 = class(TForm)
                              procedure FormCreate(Sender: TObject);
                            private
                              { Private declarations }
                            public
                              { Public declarations }
                            end;
                          
                          var
                            Form2: TForm2;
                          
                          implementation
                          
                          {$R *.dfm}
                          
                          procedure TForm2.FormCreate(Sender: TObject);
                          begin
                          
                          end;
                          
                          end.

                          Скажите, пожалуйста в чем проблема

                          Заранее спасибо!

                          Понравилась статья? Поделить с друзьями:
                        • Pro tools ошибка при запуске
                        • Pro tools run out of cpu power ошибка
                        • Pro dialog plus коды ошибок для carrier
                        • Pro cs 80r ошибка ec датчик поворотной пластины
                        • Pro cl 200 ошибка c2 255