Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 613

/ вопрос открыт /

Здравствуйте, эксперты!
Нужно сделать следующее, на канве отбразить рисунок взятый из файла (с этим проблем нет), но к этому рисунку должна быть прилеплена (например сверху) StatusBar, а снизу Edit. Причем таких связок на канве должно быть сколько угодно. к каждой нужно отдельно обращаться, у каждой изменять значения StatusBar и Edit (общая только картинка). Как это сделать ума не приложу. Можно конечно в RunTime создавать такие связки, а информацию хранить в общем файле, но может есть другой способ?

Казаков Николай Константинович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Казаков Николай Константинович (статус: 1-ый класс)
Вопрос отправлен: 27 сентября 2010, 17:43
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 2 октября 2010, 10:14; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 27 сентября 2010, 17:52 [#1]:

Проще написать компонент, на основе, например, TPanel, который сам будет рисовать на своей канве картинки и создавать (и убивать) на себе нужные дочерние компоненты.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 27 сентября 2010, 17:57 [#2]:

а можно воспользоваться фреймами. один фрейм - три нужных компонента.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 27 сентября 2010, 18:01 [#3]:

Цитата (Вадим К):

а можно воспользоваться фреймами. один фрейм - три нужных компонента.

Согласен.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Казаков Николай Константинович

Казаков Николай Константинович (статус: 1-ый класс), 28 сентября 2010, 08:38 [#4]:

а можно воспользоваться фреймами. один фрейм - три нужных компонента.

где можно почитать о фреймах, их создании и вообще этой технологии, никогда не пользовался ими. буду признателен за прямую ссылку.
min@y™

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™

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™

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™

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™

min@y™ (статус: Доктор наук), 2 октября 2010, 10:14 [#15]:

Цитата (Егор):

ну, через временную переменную - это не интересно :)

Мне тоже через #define/#undef нравится больше.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:48
Выполнено за 0.03 сек.