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

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

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

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Никто не знает как в Toolbar2000+TBX сделать зазор между кнопками на TBXToolbar?
    Целый день вожусь, а место где это описано не нашел.
     
    Нормальные герои всегда идут в обход!
    Пошел методом изменения способа прорисовки.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 01:33 27-03-2010 | Исправлено: Aleksandr N, 02:24 27-03-2010
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    Я давно им пользовался, но там есть что-то типа Separator. его нужно добавить и задать режим прорисовки, либо пробел, либо вертикальная черта.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:37 27-03-2010
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, почему вылетает с Access Violation PropInfo^.Name := Value;
     
    TBaseClass = class
    protected
      function GetPropCount: integer;
     
      function GetPropName(Index: integer): shortstring;
      procedure SetPropName(Index: integer; Value: shortstring);
    public
      property PropCount: integer read GetPropCount;
      property PropName[Index: integer]: shortstring read GetPropName write SetPropName;
    end;
     
    //работает
    function TBaseClass.GetPropName(Index: integer): shortstring;
    var
      PropInfo: PPropInfo;
      PropList: PPropList;
    begin
      GetMem(PropList, PropCount * SizeOf(pointer));
      GetPropInfos(ClassInfo, PropList);
      PropInfo := PropList^[Index];
      if PropInfo <> nil then Result := PropInfo^.Name else Result := '';//Здесь все нормально
      FreeMem(PropList, PropCount * SizeOf(pointer));
    end;
     
    //вылетает, хотя, практически, то же самое.
    procedure TBaseClass.SetPropName(Index: integer; Value: shortstring);
    var
      PropInfo: PPropInfo;
      PropList: PPropList;
    begin
      GetMem(PropList, PropCount * SizeOf(pointer));
      GetPropInfos(ClassInfo, PropList);
      PropInfo := PropList^[Index];
      if PropInfo <> nil then PropInfo^.Name := Value;//А здесь вылетает !!!!!!
      FreeMem(PropList, PropCount * SizeOf(pointer));
    end;

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 17:29 27-03-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    Про сепаратор я знаю, я не хотел его использовать. Хотел найти место где описывается кнопка и сместить её начальные координаты. В место этого пришлось добавить свойство и по его значению изменить способ прорисовки.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 17:46 27-03-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp
    А что вообще должен делать этот код? Вы уверенны что туда принципиально можно писать?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:07 28-03-2010
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Мне нужно, чтобы в RTTIInspector (или в другом) в левой колонке отображались не имена свойств (типа 'MyProp1'), а их псевдонимы из массива строк ('Мое Свойство Один'). В C# это очень удобно делается атрибутом [DisplayName]

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 15:35 28-03-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp
    На сколько я знаю RTTI в Delphi предназначено только для чтения. Я бы на вашем месте копал в сторону RTTIInspector.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:56 28-03-2010
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Дык. Я в него и копаю, только мудрено там, а справки толковой они не сделали
    ЗЫ Может кто работал с VertucalGrid - как там заменить значения полей в левой колонке на псевдонимы ?

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 18:26 28-03-2010 | Исправлено: ppkp, 18:33 28-03-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp
    Нечто типа этого: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=784 ?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 18:45 28-03-2010
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    В принципе, да. Но глубоко его не копал. А тут уже стоит TcxRTTIInspector.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 20:51 28-03-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp, RTTI-информация в экзешнике хранится в секции .code, которая не допускает модификации (т.к. при загрузке образа в память страницы помечаются атрибутами read & execute, yо никак не write). И это правильно, т.к. в частности, что бы Вы приказали делать, если присваиваемое значение имеет бОльшую длину (а память под строку выделена по фактическому содержимому без каких-л. запасов). Ну, я уже молчу про много других причин невозможности описанной операции.

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 13:02 29-03-2010
    Man_Without_Face



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

    Цитата:
    В DLL именно в том виде, что ты показал - нет. Я ж говорю, проще всего это компилять в BPL, которую и подключать к проекту. BPL-ки, кстати, можно же и динамически грузить, если я не ошибаюсь, т.е. они полноценно заменяют DLL.

    Где можно прочитать про создание bpl, в гугле ничего не нашел?
    И вопрос второй:  

    Цитата:
    кстати
    Код:
    Procedure PluginExec(AppHandle:THandle)
    begin
      Application.Handle:=AppHandle;  
    ...
    finally
      Application.Handle:=0;  
     
     не создает отдельного окна

    Куда это вставить?
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:17 29-03-2010
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AviDen
    Это все я понял, потому и использую TcxRTTIInspector из DevExpress. Только для него прктически никакой справки нет. Подсказали написать обработчик OnDrawRowHeader. Написал
     with AHeaderViewInfo do CaptionsInfo[0].Caption := sMyPropName[Row.Index];
    и все получилось. Только у RTTIInspector по умолчанию поля сортируются по алфавиту, поэтому неправильно присваиваются значения. А как это устранить - наверное, это уже из другого топика.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 13:32 29-03-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face, BPL (Borland Package Library) - это то же самое DLL, только с доп. возможностями специально для Delphi-приложений. Почитать - в хелпе или любой книге/статье по Delphi. Создаётся оно, как и DLL, из меню File | New | Other (и на вкладке New выбрать пункт Package).
     
    В целом же, основное их отличие от DLL состоит в том, что наряду с кодом, они могут экспортировать и типы данных (при использовании DLL приходится городить целый огород с type libraries и интерфейсами)
     
    Добавлено:
    ppkp, реализовывать локализацию имен свойств, перекрывая OnDraw - это жеээсть. А что, TcxRTTIInspector не позволяет задать что-то типа алиасов или отображаемых имен для свойств? Чтобы по-человечески было.
     
    Man_Without_Face, "это" нужно вставить в процедуру в DLL-ке, отображающую отчёт. И вообще, ты определись, что ли, будешь ты идти путём написания BPL, или пользовать этот способ (а то они вроде как взаимоисключающие). Судя по всему, тебе проще будет забить на BPL и использовать способ с присвоением Application.Handle.

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 14:11 29-03-2010
    ppkp

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

    Цитата:
    А что, TcxRTTIInspector не позволяет задать что-то типа алиасов или отображаемых имен для свойств? Чтобы по-человечески было.  

    Вот я тоже думал про псевдонимы свойств. Это было бы чудо. В C# все очень удобно делается атрибутом [DiplayName]. По TcxRTTIInspector справка минимальная и ничего не понятно. Даже не знаю как отключить сортировку свойств по алфавиту или узнать какой объект инспектируется

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 16:44 29-03-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AviDen
    Все равно не догоняю, ошибка: [DCC Error] bbc5_reports.dpr(21): E2003 Undeclared identifier: 'Application'
     
    library bbc5_reports;
     
    uses
      SysUtils,
      Classes,
      uReports in 'uReports.pas' {frmReports};
     
    {$R *.res}
    procedure DisplaySampleReport(AppHandle:THandle);
    begin
      Application.Handle:=AppHandle;
      //frmReports := frmReports.Create(nil);
      try
        frmReports.frxReport1.showreport;
     
      finally
        //frmReports.Free;
        Application.Handle:=0;
      end;
    end;
     
    exports  DisplaySampleReport;
     
    begin
    end.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 16:47 29-03-2010
    volser

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

    Цитата:
    Undeclared identifier: 'Application'  

    И что здесь не понятно? Или вы первый раз видите такую ошибку? Тогда вам рано писать плагины.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 17:18 29-03-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser
    Я про то что нельзя сюда вставить:
    procedure DisplaySampleReport(AppHandle:THandle);
    и
    Application.Handle:=0;

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:57 29-03-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face, добавь forms в Uses-list
     
    Добавлено:
    P.S. А в целом согласен с volser

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 18:01 29-03-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser
    AviDen
    Скорее всего рано, но поставленную задачу нужно выполнить. Все равно вылетает та же ошибка при вызове отчета:
    Access violation at address 034673E4 in module 'bbc5_reports.dll'. Read of address 00000378
    Помогите пож, мне главное чтобы отчет вызывался, остальное все по аналогии будет. Спасибо.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 09:05 30-03-2010
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru