Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Картинку вперед 
:(
    Опции темы
WolfON
Дата 6.11.2004, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Блин, такая страшная проблема, есть компонент - RxRichEdit и мне надо, чтобы картинка закрывала его часть(по верх компоненты была картинка), но сколько не нажимал Bring To Front, не помогает smile Может можно как-нить это сделать?
PM MAIL ICQ   Вверх
WolfON
Дата 7.11.2004, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Поднимаю тему
PM MAIL ICQ   Вверх
krid24
Дата 7.11.2004, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.9.2004
Где: Москва

Репутация: 1
Всего: 2



А картинка - это TImage? Тогда через Bring To Front не получится. Потому как TImage наследник от TGraphicControl. Т.е. это не окно (не имеет оконный handle), а просто рисункок на форме. К примеру, TLabel - то же самое, и его тоже не выйдет положить поверх RichEdit'а (по той же причине - это такой же "рисунок", т.е текст прорисовывается на канве родителя API'шной ф-цией DrawText ).
Выход - положить TImage на TPanel, а уж для TPanel - Bring To Front.

Это сообщение отредактировал(а) krid24 - 7.11.2004, 20:50
PM MAIL ICQ   Вверх
Guest
Дата 8.11.2004, 03:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











krid24
хех, не все так просто smile каринка не стандартной формы(я поставлю св-во transperent, она в гифе) и если я ее положу на панель у меня получится, что на прозрачном месте будет панель... а мне нужно, чтобы там был ричедит smile
  Вверх
WolfON
Дата 8.11.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Предыдущий пост - мой.
Поднимаю тему.
Блин, народ, помагайте!!!
PM MAIL ICQ   Вверх
Vit
Дата 8.11.2004, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Поверх положить прозрачную панель, а на панель картинку?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
WolfON
Дата 8.11.2004, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Vit
хех, а откуда взять прозрачную панель???
вроде в стандартных компонентах она не прозрачная.... smile
(балин, я уже всех тут задолбал, наверное smile )
PM MAIL ICQ   Вверх
WolfON
Дата 8.11.2004, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



WolfON
нащел в JEDI, но когда я текст скролиррую, ричедит все-равно наверх вылазит smile
PM MAIL ICQ   Вверх
Vit
Дата 8.11.2004, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Сейчас попробую поколдовать ...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 8.11.2004, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Мдя... задачка ещё та, кроме как положить картинку на вторую прозрачную форму вариантов что-то пока нет... Буду ещё пробовать, может что накопаю...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
WolfON
Дата 9.11.2004, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Vit
а реально, как-нибудь регионы использовать???
PM MAIL ICQ   Вверх
krid24
Дата 9.11.2004, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.9.2004
Где: Москва

Репутация: 1
Всего: 2



еще вариант - вставить картинку в RichEdit непосредственно в виде rtf-тегов (через EM_STREAMIN). Т.е. картинка становится частью rtf-документа:
Код
uses
  RichEdit;

// Stream Callback function
type
  TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte;
    cb: Longint; var pcb: Longint): DWORD;
  stdcall;

  TEditStream = record
    dwCookie: Longint;
    dwError: Longint;
    pfnCallback: TEditStreamCallBack;
  end;

// RichEdit Type
type
  TMyRichEdit = TRxRichEdit;

// EditStreamInCallback callback function
function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte;
  cb: Longint; var pcb: Longint): DWORD; stdcall;
  // by P. Below
var
  theStream: TStream;
  dataAvail: LongInt;
begin
  theStream := TStream(dwCookie);
  with theStream do
  begin
    dataAvail := Size - Position;
    Result := 0;
    if dataAvail <= cb then
    begin
      pcb := read(pbBuff^, dataAvail);
      if pcb <> dataAvail then
        Result := UINT(E_FAIL);
    end
    else
    begin
      pcb := read(pbBuff^, cb);
      if pcb <> cb then
        Result := UINT(E_FAIL);
    end;
  end;
end;

// Insert Stream into RichEdit
procedure PutRTFSelection(RichEdit: TMyRichEdit; SourceStream: TStream);
  // by P. Below
var
  EditStream: TEditStream;
begin
  with EditStream do
  begin
    dwCookie := Longint(SourceStream);
    dwError := 0;
    pfnCallback := EditStreamInCallBack;
  end;
  RichEdit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, Longint(@EditStream));
end;

// Convert Bitmap to RTF Code
function BitmapToRTF(pict: TBitmap): string;
// by D3k
var
  bi, bb, rtf: string;
  bis, bbs: Cardinal;
  achar: ShortString;
  hexpict: string;
  I: Integer;
begin
  GetDIBSizes(pict.Handle, bis, bbs);
  SetLength(bi, bis);
  SetLength(bb, bbs);
  GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^);
  rtf := '{\rtf1 {\pict\dibitmap ';
  SetLength(hexpict, (Length(bb) + Length(bi)) * 2);
  I := 2;
  for bis := 1 to Length(bi) do
  begin
    achar := Format('%x', [Integer(bi[bis])]);
    if Length(achar) = 1 then
      achar := '0' + achar;
    hexpict[I - 1] := achar[1];
    hexpict[I] := achar[2];
    Inc(I, 2);
  end;
  for bbs := 1 to Length(bb) do
  begin
    achar := Format('%x', [Integer(bb[bbs])]);
    if Length(achar) = 1 then
      achar := '0' + achar;
    hexpict[I - 1] := achar[1];
    hexpict[I] := achar[2];
    Inc(I, 2);
  end;
  rtf := rtf + hexpict + ' }}';
  Result := rtf;
end;


// Example to insert image from Image1 into RxRichEdit1
procedure TForm1.Button1Click(Sender: TObject);
var
  SS: TStringStream;
  BMP: TBitmap;
begin
  BMP := TBitmap.Create;
  BMP := Image1.Picture.Bitmap;
  SS  := TStringStream.Create(BitmapToRTF(BMP));
  try
    PutRTFSelection(RxRichEdit1, SS);
  finally
    SS.Free;
  end;
end;


Это сообщение отредактировал(а) krid24 - 9.11.2004, 07:17
PM MAIL ICQ   Вверх
krid24
Дата 9.11.2004, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.9.2004
Где: Москва

Репутация: 1
Всего: 2



вот наваял сейчас на скорую руку. Что-то типа "прозрачной панели":
Код
function SetBitmapWindow(wnd:HWND; hBMP:HBITMAP; ExcludeColor:COLORREF=$FFFFFF):boolean;
Var
 x1,x,y: Integer;
 r:HRGN;
 bm:tagBITMAP;
 memDC:HDC;
 oldBM:HBITMAP;
begin
 result:=false;
 x1 := -1;
 r := CreateRectRgn(0,0,0,0);
 if r=0 then exit;
 if GetObject(hBmp,SizeOf(bm),@bm)=0 then exit;
 SetWindowPos(wnd,0,0,0,bm.bmWidth,bm.bmHeight,SWP_NOMOVE or SWP_NOZORDER);
 memDC:=CreateCompatibleDC(0);
 oldBM:=SelectObject(memDC, hBmp);
   for y := 0 to bm.bmHeight-1 do
     for x := 0 to bm.bmWidth-1 do
         if GetPixel(memDC,x,y)<>ExcludeColor then
         begin If x1=-1 then x1 := x end
       else
         if x1>-1 then
         begin
           CombineRgn(r,r,CreateRectRgn(x1,y,x-1,y+1),RGN_OR);
           x1 := -1;
         end;
SelectObject(memDC,oldBM);
DeleteDC(memDC);
Result:=SetWindowRgn(wnd, r, True)<>0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Align:=alClient;
  SetBitmapWindow(Panel1.Handle,Шmage1.Picture.Bitmap.Handle);
end;


берешь панель, не нее картинку и все это на RichEdit (или на любой другой контрол). А в SetBitmapWindow в последнем параметре (ExcludeColor) задаешь цвет, который у картинки прозрачным будет (умолчальный - белый).


Это сообщение отредактировал(а) krid24 - 10.11.2004, 08:59
PM MAIL ICQ   Вверх
WolfON
Дата 9.11.2004, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



krid24
ты видимо не понял, зачем я это делаю smile МНЕ НУЖЕН RICHEDIT НЕСТАНДАРТНОЙ ФОРМЫ! smile
PM MAIL ICQ   Вверх
krid24
Дата 9.11.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 23.9.2004
Где: Москва

Репутация: 1
Всего: 2



Цитата(Guest @ 8.11.2004, 04:08)
хех, не все так просто  каринка не стандартной формы

Не верь глазам своим (© К.Прутков) ?

хмм... напиши поподробней, что именно тебе нужно. Какой формы RichEdit и причем тут тогда картинка. Как это все должно выглядеть? smile

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.