OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 09:46

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 01 Сентябрь, 2012 13:49 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Уважаемые коллеги.
Есть у кого простой пример отрисовки BMP на форме?
Чтобы в ходе работы программы можно было менять папку и путь к BMP файлу
и обновлять изображение на форме.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Сентябрь, 2012 17:56 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Для bmp-картинок есть стандартная вьюшка; конвертер для неё регистрируется.
Код:
   PROCEDURE Config.Setup*;
      VAR res: INTEGER;
   BEGIN
      ...
      Converters.Register("HostBitmaps.ImportBitmap", "HostBitmaps.ExportBitmap", "HostBitmaps.StdView", "bmp", {});
      ...
   END Setup;


Навскидку:
1) Открыть bmp-картинку, вставить её на форму руками, куда надо.

2) Программная замена: открыть новую картинку и заменить старую на форме.
- открытие стандартно: new := Views.Old(loc, name) --- если имя xxx.bmp, то используется соотв. конвертер и Вы получаете bmp-вьюшку
- замена:
-- найти на форме старую bmp-вьюшку (по типу, по положению --- придумайте что-нибудь) линейным поиском --- см. FormModels.Reader
-- заменить её стандартным образом, см. Containers.Model.ReplaceView


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Сентябрь, 2012 14:40 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
примерно так?
Код:
MODULE testbmp;
   IMPORT  Log := StdLog,  Views, Files,StdCmds,Containers, Controls;
   
VAR  v,nv:Views.View;
      loc:Files.Locator;
      m:Containers.Model;
         
PROCEDURE Do* ();
VAR
         name:Files.Name;
         p:Controls.Prop;
BEGIN
   StdCmds.New;
   loc:=Files.dir.This('E:\');
   name:='2.bmp';
   v := Views.OldView(loc, name);
   Views.Deposit(v);
   StdCmds.PasteView;

   NEW(p);
   p.link := "testbmp.R"; p.label := "обновить"; p.guard := ""; p.notifier := "";
   p.level := 0;
   p.opt[0] := FALSE; p.opt[1] := FALSE;
   p.opt[2] := FALSE; p.opt[3] := FALSE;
   p.opt[4] := FALSE;
   Views.Deposit(Controls.dir.NewPushButton(p));   
   StdCmds.PasteView;
   
   
   m:=Containers.Focus().ThisView().ThisModel();
   StdCmds.SetMaskMode;
   
END Do;   
   
PROCEDURE R* ();
VAR   name:Files.Name;
BEGIN
   name:='3.bmp';
   nv := Views.OldView(loc, name);
   m.ReplaceView(v,nv)
END R;   
   
END testbmp.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Сентябрь, 2012 21:23 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Имел ввиду несколько другое...
1)
Вложение:
1.png
1.png [ 105.28 КБ | Просмотров: 7215 ]
Вложение:
2.png
2.png [ 33.9 КБ | Просмотров: 7215 ]

2)
Код:
nv := Views.OldView(loc, name);
get first element;
WHILE (element # NIL) & ~(element is the right one) DO
      get next element
END;
 m.ReplaceView(v,nv)
По поиску см. Overview by Example: ObxContIter


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 05 Сентябрь, 2012 06:07 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Евгений Темиргалеев писал(а):
Имел ввиду несколько другое...

так ? (в простейшем случае вьюшку с рисунком вставляем на форму первой)
Код:
MODULE testbmp2;
   IMPORT   Views, Files,Containers;
   
VAR 
      was:BOOLEAN;
PROCEDURE Do2*;
(** focus the first control whose label is "magic name" **)
VAR c: Containers.Controller;
      name:Files.Name;
      v,nv:Views.View;
      loc:Files.Locator;
      m:Containers.Model;
BEGIN
   c := Containers.Focus();
   IF c # NIL THEN
      c.GetFirstView(Containers.any, v);

      IF v # NIL THEN
         c.SetFocus(v);
         m:=c.ThisView().ThisModel();
         IF  was  THEN
            name:='2.bmp'
         ELSE
            name:='3.bmp'
         END;
         was:=~was;
         
         loc:=Files.dir.This('E:\');         
         nv := Views.OldView(loc, name);
         m.ReplaceView(v,nv)
      END
   END
END Do2;

BEGIN
   was:=FALSE;   
END testbmp2.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 05 Сентябрь, 2012 17:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Kubanych писал(а):
Евгений Темиргалеев писал(а):
Имел ввиду несколько другое...
так ? (в простейшем случае вьюшку с рисунком вставляем на форму первой)
Да, вроде этого.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB