| 
| 
 | Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |