Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

Открыть новую тему     Написать ответ в эту тему

data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаем новые возможности и баги
Просьба писать только про Delphi 2009 и выше - по остальным версиям есть соответствующая тема.
Вопросы вареза здесь не обсуждаются !!!
См. также:
Известные важные баги Delphi 2010:

Описание________________________________________________ Исправлено Решение/Альтернатива_____________________
  1. Внимание !  Деинсталляция D2010 нарушает работу D2007 и D2009 !  
При деинсталляции удаляются CC3280MT.DLL и CC3290MT.DLL из Windows\System32,   необходимые для работы D2007 и D2009 соответственно.
Сделайте резервные копии
  2. Code Formatter не работает, если не инсталлирован пакет моделирования.   В нем также присутствует множество багов. Используйте с осторожностью.   1.   JEDI CodeFormat 2.44 SVN Snapshot (~750Kb)   Требуются JCL и JVCL  
2.GExperts with Formatter
  3. Не работает F1 в Object Inspector Update 2   IDEFixPack 2.9 от Andreas Hausladen
(dev. snapshots)
  4. Если IDE начинает падать с сообщением "Out of resources", возможно, что поврежден .res файл проекта. Удалить его, запустить IDE, открыть проект - новый .res файл будет создан автоматически.
  5. В редакторе не работает Class Completion, если в декларируемом классе есть поля с шаблонами. Перед декларированием поля добавить public или private и т.д.
  6. TTrayIcon.ShowBalloonHint() не работает на ОС ниже Vista [QC 77561] Update 2 * Установить Update 2   * ИЛИ почитать о причинах и решении проблемы на форуме embarcadero и в QC   * ИЛИ воспользоваться альтернативой, например Cooltray 4.4.0
  ...      


Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 14:28 26-08-2009 | Исправлено: data man, 18:27 06-08-2010
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0D0A
А что предполагать? Откомпилируйте с использованием отладочной инфы и сравните с результатом, получаемым при использовании $(BDS)\lib
 
Лично у меня эффект воспроизвести не удалось - при использовании $(BDS)\lib размер ехе 903 168 байт, по вашей методе - 1 018 368 байт! Все с точностью наоборот (Плюс ко всему Variants.pas дельфя вообще не захотела компилировать).

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 06:52 24-09-2009
JustAMaaan

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поставил 2010, воткнул на него с плясками PNGComponents, открываю проект от D2007, получаю "The project cannot be loaded because the required personality is not available". Гугляднекс говорит, мол "у всех бывает, не у всех проходит, создайте проект заново и напихайте в него старые файлы". Однако меня такой подход не фпирает, кто-нибудь знает способ попроще?

Всего записей: 221 | Зарегистр. 17-09-2004 | Отправлено: 09:16 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
Это все-таки новое RTTI. Чтобы был эффект надо добавить в проект
 
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
 
Те эти директивы не влияют на уже скомпиленные библиотечные модули.
 

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 09:20 24-09-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JustAMaaan

Цитата:
кто-нибудь знает способ попроще?

А зачем использовать PNGComponents (с плясками), если начиная с D2009 есть встроенная поддержка PNG ?
 
0D0A
Из Docwiki

Цитата:
Use {$WEAKLINKRTTI ON} to suppress the default behavior of including all method into the binary. The $WEAKLINKRTTI directive only affects linking. It does not affect unit compilation. It is the only way to control how much RTTI is generated in the final executable without recompiling the original units with different settings for the $RTTI directive.


----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 09:32 24-09-2009
JustAMaaan

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man

Цитата:
А зачем использовать PNGComponents (с плясками), если начиная с D2009 есть встроенная поддержка PNG ?

Там эта поддежка ограничена только чтением и записью картинок, но никак не их использованием в качестве глифов. На кнопки PNG с прозрачностью как глифы ну никак не натягиваются, без прозрачности - такое же уродство, как BMP.

Всего записей: 221 | Зарегистр. 17-09-2004 | Отправлено: 09:50 24-09-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JustAMaaan
Это довольно странно - ведь поддержка основана именно на PNGComponents (ver. 1.564). И различий немного - замена PСhar на PAnsiChar, PByte и т.д.
Хотя проблема может быть именно из-за этого - resourcestrings с одинаковыми именами, например.

Цитата:
На кнопки PNG с прозрачностью

Кнопки стандартные или из пакета PNGComponents ?
Может стОит переделать PngSpeedButton и другие контролы так, чтобы использовать TPngImage вместо TPngObject ?

----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 10:27 24-09-2009
JustAMaaan

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man

Цитата:
Это довольно странно - ведь поддержка основана именно на PNGComponents (ver. 1.564)

Не на PNGComponents, a на PNGImage.
 

Цитата:
Хотя проблема может быть именно из-за этого - resourcestrings с одинаковыми именами, например.

Оно даже проект открыть не даёт, personality моя ему не нравится Если бы давало - остальные заморочки наверняка в принципе решаемы, с переносом из Delphi 7 на Delphi 2007 тоже пришлось пару дней повозиться, но зато половину сторонних компонентов после этого удалось выкинуть за ненадобностью.
 

Цитата:
Кнопки стандартные или из пакета PNGComponents ?

Нет, из набора компонентов. Иначе зачем бы их ставить.

Всего записей: 221 | Зарегистр. 17-09-2004 | Отправлено: 11:56 24-09-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JustAMaaan

Цитата:
Не на PNGComponents, a на PNGImage.

Точно, ошибся.

Цитата:
Может стОит переделать PngSpeedButton и другие контролы так, чтобы использовать TPngImage вместо TPngObject ?

А это уже сделано, оказывается http://cc.embarcadero.com/Item/26127

Цитата:
This is an adaption for Delphi 2009 of the PngComponents created by Martijn Saly (www.thany.org), which makes use of the new built-in PngImage support.
 
The original Png units from Gustavo Daud are no longer part of the package (mostly because I'm not sure if I may distribute them). So if you want to use it with an earlier version of Delphi, you have to get hands on the original package first. The sources should be compatible downto Delphi 7.
 
This version includes the DEP fix.
 
I also added a fix that properly loads DFMs made with older Delphi versions, which contain PNG images in TImage components. For this to work you have to install the package in the IDE and use PngFunctions somewhere in your project. Don't bother if you already use at least one of PngComponents.


----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 12:09 24-09-2009 | Исправлено: data man, 12:22 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man

Цитата:
It is the only way to control how much RTTI is generated in the final executable without recompiling the original units with different settings for the $RTTI directive.  

Ну в целом примерно понятно
 

Цитата:
Ну, уже сделано, оказывается http://cc.embarcadero.com/Item/26127

Все хорошо, только при закрытии среды вылезает AV в rtl140.bpl если открывалась форма с TPngImageList.

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 12:23 24-09-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0D0A

Цитата:
Все хорошо, только при закрытии среды вылезает AV в rtl140.bpl если открывалась форма с TPngImageList.

А в этом ничего странного - там же используется патчинг методов.
Так что проблема, IMO, именно в PNGComponents.
Можно попробовать закомментить

Код:
 
if ImageListCount = 0 then
  ApplyMethodPatches;
 

Если не будет AV - копать дальше

----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 13:15 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man
Вобщем закоментарил всё про патчи, перекомпилял пакеты: AV вылетает все равно, компонент продолжает работать, картинки рисуются как надо, с альфаканалом... Чудеса.

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 15:15 24-09-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0D0A
Мне еще непонятно зачем в PngFunctions.pas сделано так ?

Код:
{$IF RTLVersion >= 20.0 }
type
  TPNGObject = class(TPngImage);
begin
  TPicture.RegisterFileFormat('', '', TPNGObject);
{$IFEND}

Можно тоже безболезненно убрать
TPngImage и так уже зарегистрирован.
 


----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 15:31 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man

Цитата:
TPngImage и так уже зарегистрирован

 
Угу. И если предпологается работать только с пнг, а не добавлять в лист иконки и пр. - можно половину закомментировать, включая патчи, типа так:
 

Код:
 
function TPngImageList.Add(Image, Mask: TBitmap): Integer;
var
  Item: TPngImageCollectionItem;
//  Patch: TMethodPatch;
  Icon: HICON;
begin
  if TObject(Self) is TPngImageList then
    if Image = nil then
      Result := -1
    else begin
      BeginUpdate;
      try
        Item := FPngImages.Add(True);
        CreatePNG(Image, Mask, Item.FPngImage);
        Result := Item.Index;
        Icon := PngToIcon(Item.PngImage, Item.Background);
        ImageList_AddIcon(Handle, Icon);
        DestroyIcon(Icon);
        Change;
      finally
        EndUpdate;
      end;
    end
  else
//  begin
//    Patch := FindMethodPatch('Add');
//    if Patch <> nil then begin
//      Patch.BeginInvokeOldMethod;
//      try
//        Result := TCustomImageList(Self).Add(Image, Mask);
//      finally
//        Patch.FinishInvokeOldMethod;
//      end;
//    end
//    else
      Result := -1;
//  end;
end;
 

 
 
Добавлено:
data man

Цитата:
TPicture.RegisterFileFormat('', '', TPNGObject);  

 
Вылетало из за этого, странно, но ладно

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 15:42 24-09-2009 | Исправлено: 0D0A, 15:43 24-09-2009
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просвятите тёмного: D2010 юникодовский?

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 18:51 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N

Цитата:
Просвятите тёмного: D2010 юникодовский?

Да.

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 18:54 24-09-2009
andrewtishkin



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974

Цитата:
Лично у меня эффект воспроизвести не удалось - при использовании $(BDS)\lib размер ехе 903 168 байт, по вашей методе - 1 018 368 байт! Все с точностью наоборот (Плюс ко всему Variants.pas дельфя вообще не захотела компилировать).

У меня тоже dcu-шки при компиляции получились больше и exe-шник само собой тоже
 
А про Variants.pas - это вообще песня Ещё в D2009 заметил эту проблему, но только вчера удосужился почитать в интернете, в чём тут дело. Нашёл в QC обращения, ещё для D2006 даже. В общем, Variants зависит от пары других важных модулей, его надо компилировать отдельно, а не в составе своей программы...
 
Для интереса проверил - DCC32 скомпилировало нормально. Но размер dcu-шки получился заметно больше, чем у той, что в папке lib

Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 19:50 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrewtishkin

Цитата:
У меня тоже dcu-шки при компиляции получились больше и exe-шник само собой тоже

 
Особо не извращаясь с компиляцией всего, можно сделать так:
Отключить дефайнами (в dpr-файле) новое RTTI и добавить в начало Library Path основные сорцы VCL: Classes, Controls, Forms, StdCtrls (дальше по вкусу), ну и то, что они потянут за собой (Variants не потянут ). На средневзвешенном приложении получается уменьшение размера ехе на ~150К.
 
Добавлено:
Еще интересная тема... В ехе файле, модули проекта теперь перечисляются в двух местах! Только побороли PACKAGEINFO и на тебе

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 20:26 24-09-2009
andrewtishkin



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0D0A
Ох, не знаю, не знаю. И таким макаром на 1 кб exe-шник вырос (ну это без отключения RTTI) и на 2 кб - с отключением RTTI. Так что не буду извращаться дальше, только директивами обойдусь, мне хватит )

Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 20:46 24-09-2009
0D0A

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrewtishkin

Цитата:
Ох, не знаю, не знаю

 
Хехе, ну значит мне повезло. Я это заметил когда пофиксил застарелый баг в Menus и подменил библиотечный - размер уменьшился на 5К, попробовал заменить остальное - помогло
 
Добавлено:

Цитата:
только директивами обойдусь, мне хватит

Еще ни разу небыло такого, чтобы не приходилось патчить VCL, так что если извращаться, то по максимуму

Всего записей: 158 | Зарегистр. 21-09-2009 | Отправлено: 21:10 24-09-2009
EugeneBoss3



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ! Помогите расшиться с программным кодом выдает ошибку при создании индекса, типа "уже используется". Компонент EhLib и Accuracer
=================================================
procedure TForm1.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
  Column: TColumnEh);
var
  iColumn: Integer;
  sIndexOld, sIndexNew,
  sIndexFieldNamesOld : string;
  bActive, bExclusive: Boolean;
begin
  iColumn    := Column.Field.Index;
  sIndexNew  := Column.FieldName;
  sIndexOld  := atbUsers.IndexFieldNames;
 
  if (Column.Title.SortMarker = smNoneEh)
  then Column.Title.SortMarker:= smDownEh;
 
  try
    with atbUsers do
    begin
      bActive    := Active;
      bExclusive := Exclusive;
      Close;
      // таблица должна быть открыта в монопольном (exclusive) режиме
      Exclusive  := True;
      Open;
      IndexDefs.Update;
      // очистить список индексов
      DeleteAllIndexes;
      case Column.Title.SortMarker of
        smDownEh:
        begin
          // создание индекса
          AddIndex('NewIndex', sIndexNew, []);
          IndexFieldNames:= sIndexNew;
          Column.Title.SortMarker:= smUpEh;
        end;
        smUpEh:
        begin
          // создание индекса
          AddIndex('NewIndex', sIndexNew, [ixDescending]);
          IndexFieldNames:= sIndexNew;
          Column.Title.SortMarker:= smDownEh;
        end;
      end;
      IndexDefs.Update;
      Close;
      Exclusive := bExclusive;
      Active    := bActive;
    end;
  finally
    if not (atbUsers.Active) then atbUsers.Active := True;
    atbUsers.First;
  end;
end;
=================================================

Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 04:54 25-09-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru