Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2010, 13:27   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

В данный момент пишу систему надстроек над чистым WinAPI (движок, так сказать). Система такая - создание приложения или окна в одну команду.

Код:
Приложение
+-Окно
+-Окно
+-Окно
За созданием и освобождением формы следит программист-пользователь (далее "ПП") системы. Но я собираюсь сделать следующее: если программист не уничтожил все формы перед вызовом DestroyApplication уничтожать их самой системой.

Но проблема в том, что список форм ПП хранит в своем модуле - создает их столько, сколько ему нужно. Доступа туда моей системой не предусмотрено. Придумал пока только один вариант - при вызове CreateForm в специальный список (Array of PForm) добавлять форму. При вызове DestroyForm - удалять форму и удалять её из списка. А при вызове DestroyApplication (его вызывает моя система по WM_DESTROY) уничтожать формы из списка, а потом вызывать уничтожение самого приложения.

Состоятельна ли такая система или это огород?

14:42

Код:
 Var
  DSTR_List_Fonts : Array Of HFont;
  DSTR_List_BufDC : Array Of HDC;
  DSTR_List_ImgDC : Array Of HDC;
  DSTR_List_ImgHD : Array Of HWND;
  DSTR_List_FrmHD : Array Of HWND;
Будет ли работать, если я сделаю так:
Код:
DSTR_List_FrmHD[0] := Form.Handle;
...
DestroyWindow(DSTR_List_FrmHD[0]);
?

Убьется ли Form.Handle?

Правила раздела

При создании темы или ответа на существующий вопрос вам необходимо соблюдать следующие несложные правила:
...
3. Не флудить. Флудом (пустой болтовней) считается все, не относящееся к теме. Здесь не чат, а форум серьезно увлеченных людей.
К флуду относится также:
- необоснованное (не требующееся по смыслу) цитирование предыдущего поста;
- размещение своих постов подряд друг за другом - пользуйтесь кнопкой "Правка" для изменения своего сообщения.
За флуд - автор поста получит нарушение №1 - "Флуд" и 2 очка штрафа.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось mihali4; 05.11.2010 в 14:54.
Alex Cones вне форума Ответить с цитированием
Старый 06.11.2010, 17:30   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Я думаю других вариантов и быть не может я точно также использовал только переменную типа TList если мне надо узнать какую то информацию из объекта то я беру её из списка точно также и уничтожаю
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 06.11.2010, 20:19   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
 Var
  DSTR_List_Fonts : Array Of HFont;
  DSTR_List_BufDC : Array Of HDC;
  DSTR_List_ImgDC : Array Of HDC;
  DSTR_List_ImgHD : Array Of HWND;
  DSTR_List_FrmHD : Array Of HWND;
И отвечаю на вопрос
Цитата:
Состоятельна ли такая система или это огород?
НЕТ!

Что если сделать так:
Код:
class GCItem
{
  HFONT Font;
  HDC BufDC;
  HDC ImgDC;
  HWND ImgHD;
  HWND FrmHD;

  ~GCItem() // destructor, distract all resources used by this item
  {
     if (Font) // is not NULL
     {
       DeleteObject(Font);
      }
     //.. same so on
  }
}

static class GC
{
  static List<GCItem> Items; // all resources used by your system

  static void CleanUp()
  {
     foreach (var item in Items)
     {
        delete item; // distract resources
     }
     Items.Clear(); // remove all pointers
  }
}


...

// before app exists

GC.CleanUp();
Написал что-то вроде C++ + C# ну не в этом суть, главное явно видна идея. Делайте так.

p.s. простите за инглиш в комментах, привычка. Надеюсь и так ясно что да как.

Последний раз редактировалось BOBAH13; 06.11.2010 в 20:21.
BOBAH13 вне форума Ответить с цитированием
Старый 06.11.2010, 20:22   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Сегодня утром сделал так:
Код:
PForm = ^TForm;
Код:
 Var

  DSTR_Form : Array Of PForm;
  DSTR_List : Array Of LongBool;
Код:
For I := 0 To Length(DSTR_List) - 1 Do
   If DSTR_List[I] = TRUE Then
    Begin
     DeleteObject(DSTR_Form[I]^.Warehouse.Buffer.Texture.BitMap);
     For J := 0 To Length(DSTR_Form[I]^.Warehouse.Texture) - 1 Do
      DeleteObject(DSTR_Form[I]^.Warehouse.Texture[J].BitMap);
     DeleteDC(DSTR_Form[I]^.Warehouse.Buffer.DC);
     ReleaseDC(DSTR_Form[I]^.Image.Handle, DSTR_Form[I]^.Image.DC);
     DestroyWindow(DSTR_Form[I]^.Image.Handle);
     DestroyWindow(DSTR_Form[I]^.Handle);
    End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 06.11.2010, 21:51   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Хм странно. А ведь действительно Михалыч прав, смахивает на флуд какой то.

Зачем вы вообще спрашивали? Я вам дал верный вариант. Ну да ладно.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с объектами С++ bobby2008 Общие вопросы C/C++ 4 13.09.2010 15:58
Работа с объектами dr.Chas Общие вопросы Delphi 1 25.05.2010 17:45
Система принятия решения (Экспертная система) daranton Microsoft Office Excel 4 01.05.2010 17:55
Работа с объектами NeXuLoN Помощь студентам 6 03.12.2009 07:45
Программа для "слежения" за com-портом Levsha100 Софт 2 29.07.2009 14:41