На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Проблема с рисунком
    Есть RichView, хочу добавить рисунок туда.
    Через AddPictureEx.

    Туда нужно передать TGraphic

    Я сделал на форме Image1 и скормил через Image1.Picture.Graphic.

    Картинка добавляется, но при закрытии формы Access violation.
    работает вот так:
    ExpandedWrap disabled
      var
      ListIcon:  TBitmap;
      begin
        ListIcon := TBitmap.Create;
       
        ListIcon.LoadFromFile('C:\User.bmp');
       
      End;


    но мне-бы хотелось все рисунки иметь в контейнере. Нашел PictureContainer от TMS со вкладки html. Там можно взять TGraphic через PictureContainer1.Items[1].Picture; Но там то-же все работает до закрытия. при закрытии Access violation.
      Возможно скажу глупость, но, если самому деструктить сначала Rich компонент, а уже потом ресурсы? (может он грохает ресурсы первым, от этого RichViewer и пытается получить доступ к высвобожденной памяти)
        Цитата ^D^ima @
        Туда нужно передать TGraphic
        Я сделал на форме Image1 и скормил через Image1.Picture.Graphic.

        Зачем?! TBitmap является наследником TGraphic (как и прочие типы рисунков TPicture). Поэтому нужно использовать простое приведение типов TGraphic(ListIcon)или ListIcon as TGraphic.

        Цитата ^D^ima @
        Картинка добавляется, но при закрытии формы Access violation.

        Ясен пень, т.к. в описании AddPictureEx черным по белому сказано: "By default, this picture will be owned by TRichView control, and you must not free it". А Image1 и PictureContainer1 сами удаляют рисунки => двойное удаление и AV

        Цитата ^D^ima @
        но мне-бы хотелось все рисунки иметь в контейнере

        Если картинки имеют одинаковый размер (иконки), то можно использовать обычный TImageList и добавлять рисунки в RichView методом AddBulletEx (в этом случае RichView не будет удалять картинки).
        В противном случае можно после вставки рисунка через AddPictureEx, делать его неудаляемым в RichView вызовом
        ExpandedWrap disabled
          RichView1.SetItemExtraIntProperty(RichView1.ItemCount-1, rvepShared, 1);
          leo
          Снимаю шляпу.

          Последний вопрос.

          для AddBulletEx как то можно в качестве TCustomImageList скормить PictureContainer1? ImageList нормально скармливается, а PictureContainer нет
          Сам компонент описан так:
          ExpandedWrap disabled
              TPictureContainer = class(TComponent)
              private
                FItems: TPictureCollection;
                procedure SetItems(const Value: TPictureCollection);
                function GetVersion: string;
                procedure SetVersion(const Value: string);
                function GetVersionNr: Integer;
                { Private declarations }
              protected
                { Protected declarations }
                function CreateItems: TPictureCollection; virtual;
              public
                { Public declarations }
                constructor Create(AOwner: TComponent); override;
                destructor Destroy; override;
                function FindPicture(s: string): TGraphic; virtual;
              published
                { Published declarations }
                property Items: TPictureCollection read FItems write SetItems;
                property Version: string read GetVersion write SetVersion;
              end;
            Цитата ^D^ima @
            мне-бы хотелось все рисунки иметь в контейнере

            http://flylib.com/books/en/1.228.1.161/1/
              Цитата ^D^ima @
              для AddBulletEx как то можно в качестве TCustomImageList скормить PictureContainer1?

              Нет, нельзя. TCustomImageList основан на виндовом контроле и имеет кучу своих специфических свойств и методов.
              Просто если твои картинки (по всей видимости иконки) имеют одинаковый размер, то можно (попробовать) использовать в качестве контейнера TImageList.
              Если же размер картинок разный (или не хочется cвязываться с TImageList), то можно использовать любой другой контейнер, а для предотвращения двойного удаления картинок запрещать их удаление в RichView
              Сообщение отредактировано: leo -
                :thanks:
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0265 ]   [ 17 queries used ]   [ Generated: 26.04.24, 10:29 GMT ]