|
Вопрос # 4 613/ вопрос открыт / |
|
Здравствуйте, эксперты!
Нужно сделать следующее, на канве отбразить рисунок взятый из файла (с этим проблем нет), но к этому рисунку должна быть прилеплена (например сверху) StatusBar, а снизу Edit. Причем таких связок на канве должно быть сколько угодно. к каждой нужно отдельно обращаться, у каждой изменять значения StatusBar и Edit (общая только картинка). Как это сделать ума не приложу. Можно конечно в RunTime создавать такие связки, а информацию хранить в общем файле, но может есть другой способ?
Мини-форум вопроса
Всего сообщений: 15; последнее сообщение — 2 октября 2010, 10:14; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 27 сентября 2010, 17:52 [#1]:
Проще написать компонент, на основе, например, TPanel, который сам будет рисовать на своей канве картинки и создавать (и убивать) на себе нужные дочерние компоненты.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 27 сентября 2010, 17:57 [#2]:
а можно воспользоваться фреймами. один фрейм - три нужных компонента.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 27 сентября 2010, 18:01 [#3]:
Цитата (Вадим К):
а можно воспользоваться фреймами. один фрейм - три нужных компонента.
Согласен.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 28 сентября 2010, 08:38 [#4]:
а можно воспользоваться фреймами. один фрейм - три нужных компонента.
где можно почитать о фреймах, их создании и вообще этой технологии, никогда не пользовался ими. буду признателен за прямую ссылку.
|
|
min@y™ (статус: Доктор наук), 28 сентября 2010, 09:42 [#5]:
Цитата (Казаков Николай Константинович):
где можно почитать о фреймах, их создании и вообще этой технологии, никогда не пользовался ими. буду признателен за прямую ссылку.
ССЫЛКА!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 29 сентября 2010, 16:35 [#6]:
для реализации задачи решил воспользоваться фреймами, создал фрейм, разместил на нем картинку, прогрессбар, лейбл. пытаюсь динамичски разместить его на форме, следующим образом
procedure TForm1.Button1Click(Sender: TObject);
var Frame: TFrame2;
begin
frame:=TFrame2.Create(form1);
frame.Parent:=TWinControl(form1);
frame.Free
end;
без строки frame.Free создает один фрейм, дальше ругается, с этой строкой вообще не отображает фрейм. Почему? где косяк )))?
|
|
min@y™ (статус: Доктор наук), 29 сентября 2010, 16:46 [#7]:
Цитата (Казаков Николай Константинович):
без строки frame.Free создает один фрейм, дальше ругается, с этой строкой вообще не отображает фрейм. Почему? где косяк )))?
Косяк, видимо, в ДНК (© анекдот из интернета). Почитай, что делает метод Free().
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 29 сентября 2010, 17:27 [#8]:
процедура free используется для освобождения памяти, динамически выделенной под объект.
И что???
я и написал, что при использовании free он не оставляет на форме фрейма. что посоветуете не использовать данный метод?
P.S. анекдот классный, но обидный, ))) шучу
|
|
Вадим К (статус: Академик), 29 сентября 2010, 17:49 [#9]:
с строкой frame.free конечно ничего не отобразит. Потому что Вы сами убираете за собой.
Цитата (Казаков Николай Константинович):
дальше ругается,
А как ругается? Приведите текст "ругательства".
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 30 сентября 2010, 09:06 [#10]:
Для кода:
procedure TForm1.Button1Click(Sender: TObject);
var Frame: TFrame2;
begin
frame:=TFrame2.Create(form1);
frame.Parent:=TWinControl(form1);
// frame.Free
end;
возникает ошибка следующего содержания (полный текст):
Project Project1.exe raised exception class EComponentError with message 'A component named Frame2 already exists'. Process stopped. Use Step or Run to continue.
|
|
min@y™ (статус: Доктор наук), 30 сентября 2010, 09:16 [#11]:
Цитата (Казаков Николай Константинович):
возникает ошибка следующего содержания (полный текст):
Project Project1.exe raised exception class EComponentError with message 'A component named Frame2 already exists'. Process stopped. Use Step or Run to continue.
Попробуй так:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TFrame2.Create(Self) do
begin
Name:= '';
Parent:= Self;
//Top:= ...;
//Left:= ...;
end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 2 октября 2010, 09:23 [#12]:
Цитата (min@y™):
with TFrame2.Create(Self)
эх, вот почему в си нет with? такой лаконичный язык, а такой конструкции нет. печально
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 2 октября 2010, 09:29 [#13]:
Цитата (Егор):
эх, вот почему в си нет with? такой лаконичный язык, а такой конструкции нет. печально
Есть ли в C++ with?
Автор: OlegGG
Прямого аналога нет - языки все-таки разные, но можно использовать следующие конструкции, обладающие схожими возможностями:
Вариант №1 - использование макроопределения:
#define kanva Form1->Canvas
kanva->LineTo(random(100),random(100));
Вариант №2 - использование указателя:
TCanvas *kanva = Form1->Canvas;
kanva->MoveTo(0,0);
kanva->LineTo(random(100),random(100));
Вариант №3 - использование ссылки(похож на предыдущий):
TCanvas &kanva = *(Form1->Canvas);
kanva.MoveTo(0,0);
kanva.LineTo(random(100),random(100));
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 2 октября 2010, 09:53 [#14]:
ну, через временную переменную - это не интересно
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 2 октября 2010, 10:14 [#15]:
Цитата (Егор):
ну, через временную переменную - это не интересно
Мне тоже через #define/#undef нравится больше.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|