Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 20.09.2010, 17:55   #1
Alex Cones
Trust no one.
Профессионал
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Адрес: In the middle of nowhere.
Сообщений: 6,529
Репутация: 1440
По умолчанию Присваивание значений одинаковым полям разных типов.

Оптимизация.

Есть у меня процедура создания окна, в котором я заодно задаю ему свойства типа прозрачности и проч.
Код:

 Procedure CreateForm(Var Target : TForm);
 Begin
  Target.Handle := CreateWindowEx(0, 'TSquaryForm', '',                           { Класс окна, заголовок     }
                                  WS_POPUP,                                       { Свойства                  }
                                  Target.Left,                                    { Позиция слева             }
                                  Target.Top,                                     { Позиция сверху            }
                                  Target.Width,                                   { Ширина окна               }
                                  Target.Height,                                  { Высота окна               }
                                  0, 0,                                           { Меню                      }
                                  Application.Handle, Nil);                       { Родитель                  }
  Target.Image.Handle := CreateWindow('Static', '',                               { Класс окна, заголовок     }
                                      WS_CHILD Or SS_BITMAP Or WS_VISIBLE,        { Свойства                  }
                                      0,                                          { Позиция слева             }
                                      0,                                          { Позиция сверху            }
                                      Target.Width,                               { Ширина окна               }
                                      Target.Height,                              { Высота окна               }
                                      Target.Handle,                              { Родитель                  }
                                      0,                                          { Меню                      }
                                      Application.Handle, Nil);                   { Верхний родитель          }
  Target.Image.Font := CreateFont(-9, 0, 0, 0, 0, 0, 0, 0,                        { Размеры шрифта            }
                                  RUSSIAN_CHARSET,                                { Набор символов            }
                                  OUT_DEFAULT_PRECIS,                             { Точность символов         }
                                  CLIP_DEFAULT_PRECIS,                            { Точность символов         }
                                  DEFAULT_QUALITY,                                { Качество                  }
                                  FF_DONTCARE Or DEFAULT_PITCH,                   { Тип вывода                }
                                  'Small Fonts');                                 { Шрифт                     }
  SetClassLong(Target.Handle, GCL_HBRBACKGROUND, CreateSolidBrush(COLOR_PINK));   { Закраска фона             }
  SetWindowLong(Target.Handle,                                                    { Установка стилей окна     }
                GWL_EXSTYLE,                                                      { Новый стиль окна          }
                GetWindowLong(Target.Handle,                                      { Получение старого стиля   }
                              GWL_EXSTYLE) Or WS_EX_LAYERED Or WS_EX_TOOLWINDOW); { Установка нового стиля    }
  SetLayeredWindowAttributes(Target.Handle,                                       { Установка аттрибутов окна }
                             COLOR_PINK,                                          { Ключевой цвет             }
                             0,                                                   { Альфа канал выкл          }
                             LWA_COLORKEY);                                       { Только ключевой цвет      }
  Target.Image.DC := GetDC(Target.Image.Handle);                                  { Контекст изображения      }
 End;

Что есть TForm?
Код:

  TForm = Record             { Форма                      }
   Handle      : HWND;       { Хендл формы                }
   Left        : Integer;    { Координаты : Отступ слева  }
   Top         : Integer;    { Координаты : Отступ справа }
   Width       : Integer;    { Координаты : Ширина        }
   Height      : Integer;    { Координаты : Высота        }
   Image       : TImage;     { Изображение                }
   Visible     : Boolean;    { Видимость формы            }
   ActiveCell  : TPoint;     { Активная ячейка            }
  End;

__________________
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума   Ответить с цитированием
Старый 20.09.2010, 17:56   #2
Alex Cones
Trust no one.
Профессионал
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Адрес: In the middle of nowhere.
Сообщений: 6,529
Репутация: 1440
По умолчанию

Параллельно с формами
Код:

  FRMMain        : TForm;
  FRMHint        : TForm;
  FRMCont        : TForm;
  FRMIcon        : TForm;

Я использую "склады" для изображений:
Код:

  TFRMMainWar = Record         { Склад главной формы }
   Buffer : TBuffer;           { Буфер               }
   Cells  : Array Of TTexture; { Кнопки запуска      }
  End;

  TFRMHintWar = Record { Склад формы подсказок }
   Buffer : TBuffer;   { Буфер                 }
   Back   : TTexture;  { Фон                   }
  End;

  TFRMContWar = Record                                        { Склад формы контейнера }
   Buffer : TBuffer;                                          { Буфер                  }
   Parts  : Array [0..CONTAINER_PARTS_COUNT - 1] Of TTexture; { Осколки контейнера     }
  End;

  TFRMIconWar = Record         { Склад формы иконок }
   Buffer : TBuffer;           { Буфер              }
   Cells  : Array of TTexture; { Иконки             }
  End;

Все разные, поскольку у форм разные назначения.

А теперь основной вопрос:

Я использую следующую функу для создания форм:
Код:

 Procedure CreateForms;
 Begin
  CreateForm(FRMMain);                                                       { Создание главной формы           }
  CreateForm(FRMHint);                                                       { Создание формы подсказок         }
  CreateForm(FRMCont);                                                       { Создание формы контейнера        }
  CreateForm(FRMIcon);                                                       { Создание формы иконок контейнера }
  SelectObject(FRMMainWar.Buffer.DC, FRMMain.Image.Font);                    { Присвоение шрифта                }
  SelectObject(FRMHintWar.Buffer.DC, FRMHint.Image.Font);                    { Присвоение шрифта                }
  SelectObject(FRMContWar.Buffer.DC, FRMCont.Image.Font);                    { Присвоение шрифта                }
  SelectObject(FRMIconWar.Buffer.DC, FRMIcon.Image.Font);                    { Присвоение шрифта                }
  SetBkMode(FRMMainWar.Buffer.DC, TRANSPARENT);                              { Прозрачный фон шрифта            }
  SetBkMode(FRMHintWar.Buffer.DC, TRANSPARENT);                              { Прозрачный фон шрифта            }
  SetBkMode(FRMContWar.Buffer.DC, TRANSPARENT);                              { Прозрачный фон шрифта            }
  SetBkMode(FRMIconWar.Buffer.DC, TRANSPARENT);                              { Прозрачный фон шрифта            }
  SetTextColor(FRMMainWar.Buffer.DC, COLOR_WHITE);                           { Белый цвет шрифта                }
  SetTextColor(FRMHintWar.Buffer.DC, COLOR_WHITE);                           { Белый цвет шрифта                }
  SetTextColor(FRMContWar.Buffer.DC, COLOR_WHITE);                           { Белый цвет шрифта                }
  SetTextColor(FRMIconWar.Buffer.DC, COLOR_WHITE);                           { Белый цвет шрифта                }
  FRMMainWar.Buffer.DC := CreateCompatibleDC(FRMMain.Image.DC);              { Создание контекста буферы        }
  FRMHintWar.Buffer.DC := CreateCompatibleDC(FRMHint.Image.DC);              { Создание контекста буферы        }
  FRMContWar.Buffer.DC := CreateCompatibleDC(FRMCont.Image.DC);              { Создание контекста буферы        }
  FRMIconWar.Buffer.DC := CreateCompatibleDC(FRMIcon.Image.DC);              { Создание контекста буферы        }
  FRMMainWar.Buffer.Tex.Bitmap := CreateCompatibleBitmap(FRMMain.Image.DC,   { Создание буферного битмапа       }
                                                         FRMMain.Width,      { Ширина                           }
                                                         FRMMain.Height);    { Высота                           }
  FRMHintWar.Buffer.Tex.Bitmap := CreateCompatibleBitmap(FRMHint.Image.DC,   { Создание буферного битмапа       }
                                                         FRMHint.Width,      { Ширина                           }
                                                         FRMHint.Height);    { Высота                           }
  FRMContWar.Buffer.Tex.Bitmap := CreateCompatibleBitmap(FRMCont.Image.DC,   { Создание буферного битмапа       }
                                                         FRMCont.Width,      { Ширина                           }
                                                         FRMCont.Height);    { Высота                           }
  FRMIconWar.Buffer.Tex.Bitmap := CreateCompatibleBitmap(FRMIcon.Image.DC,   { Создание буферного битмапа       }
                                                         FRMIcon.Width,      { Ширина                           }
                                                         FRMIcon.Height);    { высота                           }
 End;

Вопрос: можно ли конструкции работы с буферами переместить в процедуру создания конкретного окна?
__________________
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние одного dbf в другой с одинаковым названием, но из разных директорий xamillion Microsoft Office Excel 25 18.09.2010 13:59
Вывод профайлов разных типов Krasi PHP 6 21.07.2010 18:44
произведение разных типов Асхат Microsoft Office Excel 2 23.04.2010 01:02
Обьединение разных типов даных женя2010 Microsoft Office Excel 3 21.04.2010 12:56


09:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru