Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 24
1

Не удаляются динамически созданные объекты TImage

24.05.2012, 14:35. Показов 1876. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Button2Click создает массив объектов Block[st] типа ТImage..
Button3Click должен их удалять..использую метод Free но они не удаляются почему?
Delphi
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, Menus;
 
type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Button3: TButton;
    RichEdit2: TRichEdit;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    RichEdit3: TRichEdit;
    Button4: TButton;
    ComboBox1: TComboBox;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
          private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 { p: tpoint;
  fname: string;
  i,k, st,   // ê îòñëåæèâàåò çíà÷åíèå i;
  LeftPosMarker,
  TopPosMarker,
  MarkerHeight,
  LinesKol: integer;
  Marker, Block : array of TImage;
  Key: TLabel;}
 
implementation
 
uses Unit2, Unit3, Unit4, Unit5;
 
{$R *.dfm}
var
  BlockKol,
  LeftPosBlock,
  TopPosBlock,
  BlockHeight: integer;
  p: tpoint;
  fname: string;
  i,k, st,   // ê îòñëåæèâàåò çíà÷åíèå i;
  LeftPosMarker,
  TopPosMarker,
  MarkerHeight,
  LinesKol: integer;
  Marker, Block : array of TImage;
  Key: TLabel;
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.Lines.LoadFromFile ('prog_text\stackcreate.rtf');
LinesKol:= richedit1.Lines.Count;
i:=0;
button2.Enabled:=true;
button1.Enabled:=false;
BlockKol:=0;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Clear;
RichEdit2.Clear;
Label1.Caption:='';
i:=0;
st:=0;
BlockKol:=0;
LeftPosMarker:=8;
TopPosMarker:=56;
MarkerHeight:=0;
 
LeftPosBlock:=688;
TopPosBlock:=512;
BlockHeight:=0;
 
button1.Enabled:=true;
button2.Enabled:=false;
button3.Enabled:=false;
N1.Enabled:=False;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 
//óñòàíîâêà ðàçìåðíîñòåé äèíàìè÷åñêèõ ìàññèâîâ
SetLength(Marker,LinesKol);
SetLength(Block,LinesKol);
 
    if i< richedit1.Lines.Count   // ïîêà êîëè÷åñòâî íàæàòèé íà êíîïêó íå ðàâíî êîëè÷åñòâó ñòðîê
 
       then
        // âûäåëåíèå òåêóùåé ñòðîêè êðàñíûì
         p.x:=0;
         p.y:=i;
         Richedit1.CaretPos:=p;
         Richedit1.SelLength:=Length(richedit1.Lines[i]);
         Richedit1.SelAttributes.Color := clRed;
         //âûâîä ïîäñêàçîê
         {fname:='hint_text\'+IntTostr(i)+'.txt';
         RichEdit2.Lines.LoadFromFile (fname); }
 
         // ñîçäàíèå ìàðêåðà
           Marker[i]:=TImage.Create(Self);
           with Marker[i] do
                          begin
                             Parent:=Form1;
                             Picture.LoadFromFile('Image\Run.bmp');
                             AutoSize:=True;
                             Top := TopPosMarker+MarkerHeight;
                             Left := LeftPosMarker;
                           end;
 
 
    // ñíÿòèå âûäåëåíèÿ ñ ïðåäûäóùåé ñòðîêè 
    if i>0
        then
        begin
         p.x:=0;
         p.y:=i-1;
         Richedit1.CaretPos:=p;
         Richedit1.SelLength:=Length(richedit1.Lines[i-1]);
         Richedit1.SelAttributes.Color := clBlack;
         Marker[i-1].Free;
        end;
 
  // ñîçäàíèå áëîêîâ ñòåêà
    if (i>5) and (i<20)  then
       begin
          Block[st]:=TImage.Create(Self);
           with Block[st] do
                          begin
                             Parent:=Form1;
                             if i=6 then
 
                                 Picture.LoadFromFile('Image\Stack\Nil_Block.bmp')
                                    else
                                 Picture.LoadFromFile('Image\Stack\Block.bmp');
 
 
                             AutoSize:=True;
                             Top := TopPosBlock-BlockHeight;
                             Left := LeftPosBlock;
                           end;
      BlockHeight:=BlockHeight+74;
      BlockKol:=BlockKol+1;
            end;
 
 
     label2.caption:=InttoStr(blockkol);;
   // ïðîêðóòêà ñ÷åò÷èêîâ
 
    i:=i+1;
    k:=i-1;
    st:=st+1;
 
    //êîððåêòèðîâêà ïîçèöèè ìàðêåðà
    if i>14 then  MarkerHeight:=MarkerHeight+18 else
    MarkerHeight:=MarkerHeight+17;
 
    //âûâîä íîìåðà òåêóùåé ñòðîêè
    Label1.Caption:='Line - '+InttoStr(i);
 
    // Åñëè äîñòèãíóò êîíåö
    if i= richedit1.Lines.Count then ShowMessage('Compile Finished');
 
//Reset àêòèâèðîâàòü
button3.Enabled:=true;
 
 
 
end;
 
{************************************************************
**********************R E S E T*****************************
*************************************************************}
 
procedure TForm1.Button3Click(Sender: TObject);
begin
 
//óäàëåíèå ìàðêåðà
Marker[k].Free;
 
          //ñíÿòèå âûäåëåíèÿ ñòðîêè
         p.x:=0;
         p.y:=k;
         Richedit1.CaretPos:=p;
         Richedit1.SelLength:=Length(richedit1.Lines[k]);
         Richedit1.SelAttributes.Color := clBlack;
 
//î÷èñòêà ïðîãðààììíîãî êîäà
RichEdit1.Clear;
 
//Ñáðîñ ñ÷åò÷èêà ñòðîê
Label1.Caption:='';
 
//ñáðîñ çíà÷åíèé ñ÷åò÷èêîâ
i:=0;
st:=0;
 
//óäàëåíèå áëîêîâ ñòåêà
for i:=0 to BlockKol do
   Block[i].Free;
 
// óñòàíîâêà ïåðâîíà÷àëüíûõ çíà÷åíèé ïîçèöèè ìàðêåðà
LeftPosMarker:=8;
TopPosMarker:=56;
MarkerHeight:=0;
 
// óñòàíîâêà ïåðâîíà÷àëüíûõ çíà÷åíèé ïîçèöèè áëîêà ñòåêà
LeftPosBlock:=688;
TopPosBlock:=512;
BlockHeight:=0;
 
//óïðàâëåíèå äîñòóïîì êíîïîê
button1.Enabled:=true;
button2.Enabled:=false;
button3.Enabled:=false;
 
label3.Caption:=Inttostr(blockkol);
end;
 
 
procedure TForm1.N1Click(Sender: TObject);
begin
Form1.Show;
end;
 
procedure TForm1.N2Click(Sender: TObject);
begin
Form2.Show;
end;
 
procedure TForm1.N3Click(Sender: TObject);
begin
Form3.Show;
end;
 
procedure TForm1.N7Click(Sender: TObject);
begin
Form1.Close;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
//RichEdit3.Lines[0].add:='asdasd '
end;
 
procedure TForm1.N4Click(Sender: TObject);
begin
WinExec('hh.exe Help\help.chm',SW_SHOW);
end;
 
procedure TForm1.N10Click(Sender: TObject);
begin
Form5.Show;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2012, 14:35
Ответы с готовыми решениями:

Динамически созданные формы
Доброго времени суток! Создаю форму вот так: procedure TForm1.Button1Click(Sender:...

Удаление динамически созданных TImage
добрый день! нужна помощ! подскажите пожалуста как при динамически созданных image-ах по клику на...

Как удалить динамически созданные объекты??
Проблема такова: требуется удалить динамически созданные компоненты label и image вот кусок их...

Как удалить динамически созданные объекты для повторного их создания
Значит так, в combobox выбираю количество предложим edit объекты, создаем их и при повторном выборе...

13
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
24.05.2012, 15:46 2
автор походу просто хочет чтобы маркерами выделялись строки в RichEdit

SynEdit компонент подсветки кода. На нем написан Notepad++

для версий до 2006 http://sourceforge.net/project... 0Releases/
для версий с юникодом (от 2009) http://mh-nexus.de/downloads/UniSynEdit.zip
Миниатюры
Не удаляются динамически созданные объекты TImage  
1
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 24
24.05.2012, 16:56  [ТС] 3
а через какие методы нужно выделять строки в нем?? и как?
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
25.05.2012, 07:53 4
не совсем понятно, зачем вам переменная BlockCol, когда можно воспользоваться Length(Block).
а как вы определяете, что они не удаляются?
1
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 24
25.05.2012, 12:06  [ТС] 5
через blockkol хотел отследить количество созданных блоков чтобы в используя его в цикле удалить объекты... Ну а определил я это так как они с формы не исчезли...
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
25.05.2012, 12:31 6
посмотрел внимательнее.
интересно и непонятно.
попробуйте для начала в
Delphi
1
Block[st]:=TImage.Create(Self);
заменить AOwner на nil.
пришлите весь проект (с формой), посмотрю.
Какая версия Delphi?

и таки да, позвольте дать вам совет, как начинающему (уж извините)
НЕ ИСПОЛЬЗОВАТЬ ГЛОБАЛКИ!!! НИКОГДА!!!
1
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
25.05.2012, 12:33 7
Цитата Сообщение от dondublon Посмотреть сообщение
и таки да, позвольте дать вам совет, как начинающему (уж извините)
НЕ ИСПОЛЬЗОВАТЬ ГЛОБАЛКИ!!! НИКОГДА!!!
Вы просто не умеете их готовить.
1
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
25.05.2012, 13:03 8
Цитата Сообщение от Alex_pac Посмотреть сообщение
Вы просто не умеете их готовить.
Тех, кто использует глобалки - в угол, коленями на горох и пороть розгами.

Добавлено через 26 минут
дабы не засорять эту тему оффтопиком:
Немного о глобальных переменных
1
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
25.05.2012, 13:13 9
dondublon да у вас параноя!
1
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
25.05.2012, 13:19 10
Alex_pac,
имею право.
как раз сейчас я трахаюсь с очень старым кодом на delphi.
его писал хороший мозг (без шуток) в области математики, но вот программировать он не умеет.
а код сложный и нужный.
там до хрена глобалок и прочих прелестей, за которые надо отрубать руки.
наверное, тот, кто его писал, и те, кто это пропустил, тоже думали, что "ничего страшного".
1
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 24
25.05.2012, 14:59  [ТС] 11
вот онАрхив WinRAR.rar
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
25.05.2012, 15:33 12
посмотрел. пока не могу полноценно запустить из-за SynEdit.

не компилится, имеется много непонятных переменных. бросил я это дело. то, что имеется только до-юникодная версия контрола, еще можно пережить.

но, чтобы можно было разобраться, вам надо исключить глобалки.
может, и проблема ваша уйдет. а то при таком подходе запросто можно перепутать индексы или еще что-нибудь.

много похожего кода. напр, на form1 и form5 - примерно такое:
Delphi
1
2
3
4
5
6
7
8
9
if i< Synedit1.Lines.Count  // пока количество нажатий на кнопку не равно количеству строк
 
       then
        // выделение текущей строки красным
 
//  synedit1.SelectedColor.Background:=clred;
//  synedit1.SelectedColor.Foreground:=clblue;
  x1:=pos(SynEdit1.Lines[i],SynEdit1.Text)-1;
  x2:=pos(SynEdit1.Lines[i],SynEdit1.Text)+length(SynEdit1.Lines[i]);
похоже, что забыли begin+end. глаз зацепился.

вместо массива с глобальным счетчиком воспользуйтесь TList. если б версия была 2010+, можно было использовать генериковский лист.
0
0 / 0 / 0
Регистрация: 29.04.2012
Сообщений: 24
25.05.2012, 15:47  [ТС] 13
для Удаления использовал Length(Block) вроде работает..но когда много раз создаю объекты и удаляю их появляется ошибка обращения к памяти...
0
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
25.05.2012, 18:46 14
воспользуйтесь списком Tlist. станет гораздо логичнее, может, и найдете причину.
если честно, мне лень вникать в такой запутаный код, уж простите.
0
25.05.2012, 18:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2012, 18:46
Помогаю со студенческими работами здесь

Динамически созданные TLabel's и onClick
Здравствуйте, помогите пожалуйста с решением задачи. Есть дочерняя TForm2, на ней одна кнопка. При...

Как удалить динамически созданные компоненты?
Пробовал удалить так for i:= Form12.ComponentCount-1 downto 0 do begin ...

Программно\динамически созданные Edit\Label
Привет. Написал программу, в которой динамически создаётся n-ое кол-во Edit и Label. На лейблах...

Динамически созданые TImage не видны в рантайме
Чего тут не хватает? procedure TForm1.FormCreate(Sender: TObject); var i,j:Byte; begin for...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru