Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2007, 07:17   #21
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
Хорошо

Цитата:
Сообщение от GAGARIN-NEW Посмотреть сообщение
Даже незнаю вродебы то но выглядит както по досовски //моё мнение
И способ загрузки там немного перемудрённый .... наверно я всётаки сделаю все смайлы одинакового размера и пихну их в какойто стандартный компонент , раз столько волокиты ...

Если вдруг всётаки найдётся чтото таково рода пишите ! всегда пригодится...

Всем пасиба за советы !
Всё таки ты рано сдался, ведь тебе дали уже работающий "компонент", тебе остаётся только вставить процедуру поиска картинок с расширением "bmp" и "Jpg" процедеру определения размера (т.е. автоматически большие смайлы ставить в первый столбец, чуть поменьше во второй, и т.д.). Дальше сделать такую штуку: при нажатии на кнопку динамически создавать форму, показывать её, потом на всю клиентскую область делать ту штуку , которую тебе дали, при нажатии на смайл разрушать форму, и всё!
При желании можно всё это пихнуть в компонент, это не долго!
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 11.12.2007, 18:24   #22
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А если смайлов штук 300 ? Пока найдеш + посмотрю я на размер Вашего меню.
А на счет динамически создавать, разрушать формы - бессмыслица. Для чего дано Visible ?
И в чем сложность отрисовки в том же листбоксе ?

Код:
type
PListItem = ^TListItem;
TListItem = packed record
  Code: String;
  FileName: String;
  ImageIndex: Integer;
end;

...
procedure AddSmileToList(FileName, Code: String; ImageIndex: Integer);
var
  pl: PListItem;
begin
  new(pl);
  pl.FileName := FileName;
  pl.Code := Code;
  pl.ImageIndex := ImageIndex;
  ListBox1.AddItem('', TObject(pl));
end;


...

// отрисовка присовить процедуру к TListBox.OnDraw;
procedure DoDraw;
var
  pRect: TRect;
  pl: PListItem;
  dItem: TBitMap;
  dSmile: TBitMap;
begin
  pRect := TListBox(Sender).ItemRect(TListBox(Sender).ItemIndex);
  pl := PListItem(TListBox(Sender).Items.Objects[TListBox(Sender).ItemIndex]);

  if not FileExists(pl.FileName) then
  begin
    ...
    // тут вашего смайла нет... поэтому смысла рисовать тоже нет
    ...
  end;

  dItem := TBitMap.Create;
  dItem.Width := pRect.Right - pRect.Left;
  dItem.Height := pRect.Bottom - pRect.Top;

  dSmile := TBitMap.Create;
  dSmile.LoadFromFile(pl.FileName);

  // ну тут можете установить прозрачность для dSmile если такое присутствует
  
  dItem.Canvas.Brush.Color := TListBox(Sender).Color;
  dItem.Canvas.FillRect(dItem.Canvas.ClipRect);

  dItem.Canvas.Draw((dItem.Width - dSmile.Width) div 2,
    (dItem.Height - dSmile.Height) div 2, dSmile);

  TListBox(Sender).Canvas.Draw(pRect.Left, pRect.Top, dItem);
  
  dSmile.Free;
  dItem.Free;
end;

...
Вроде верно написал, просто писал сразу в броузере.

Последний раз редактировалось BOBAH13; 11.12.2007 в 18:26.
BOBAH13 вне форума Ответить с цитированием
Старый 11.12.2007, 18:42   #23
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
Радость

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
А если смайлов штук 300 ? Пока найдеш + посмотрю я на размер Вашего меню.
А на счет динамически создавать, разрушать формы - бессмыслица. Для чего дано Visible ?
И в чем сложность отрисовки в том же листбоксе ?

Код:
type
PListItem = ^TListItem;
TListItem = packed record
  Code: String;
  FileName: String;
  ImageIndex: Integer;
end;

...
procedure AddSmileToList(FileName, Code: String; ImageIndex: Integer);
var
  pl: PListItem;
begin
  new(pl);
  pl.FileName := FileName;
  pl.Code := Code;
  pl.ImageIndex := ImageIndex;
  ListBox1.AddItem('', TObject(pl));
end;


...

// отрисовка присовить процедуру к TListBox.OnDraw;
procedure DoDraw;
var
  pRect: TRect;
  pl: PListItem;
  dItem: TBitMap;
  dSmile: TBitMap;
begin
  pRect := TListBox(Sender).ItemRect(TListBox(Sender).ItemIndex);
  pl := PListItem(TListBox(Sender).Items.Objects[TListBox(Sender).ItemIndex]);

  if not FileExists(pl.FileName) then
  begin
    ...
    // тут вашего смайла нет... поэтому смысла рисовать тоже нет
    ...
  end;

  dItem := TBitMap.Create;
  dItem.Width := pRect.Right - pRect.Left;
  dItem.Height := pRect.Bottom - pRect.Top;

  dSmile := TBitMap.Create;
  dSmile.LoadFromFile(pl.FileName);

  // ну тут можете установить прозрачность для dSmile если такое присутствует
  
  dItem.Canvas.Brush.Color := TListBox(Sender).Color;
  dItem.Canvas.FillRect(dItem.Canvas.ClipRect);

  dItem.Canvas.Draw((dItem.Width - dSmile.Width) div 2,
    (dItem.Height - dSmile.Height) div 2, dSmile);

  TListBox(Sender).Canvas.Draw(pRect.Left, pRect.Top, dItem);
  
  dSmile.Free;
  dItem.Free;
end;

...
Вроде верно написал, просто писал сразу в броузере.
Опятьже слишком сложно для моего ума ... у меня смайлов 75. расчитываю наверно сделать ListView с картинками одинакового размера ...
---
GAGARIN-NEW вне форума Ответить с цитированием
Старый 11.12.2007, 19:11   #24
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
Радость

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
А на счет динамически создавать, разрушать формы - бессмыслица. Для чего дано Visible ?
Можно и в начале создать потом просто вызывать, как visible, и not Visible, а при выходе разрушать. Можно и так не спорю.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 11.12.2007, 23:44   #25
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от GAGARIN-NEW Посмотреть сообщение
Опятьже слишком сложно для моего ума ...
ну подожди полгодика. Может легче будет для восприятия твоим "умом". Хотя с таким подходом к вопросу не думаю, что так...
pu4koff вне форума Ответить с цитированием
Старый 13.12.2007, 11:37   #26
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
Восклицание

Цитата:
Сообщение от pu4koff Посмотреть сообщение
ну подожди полгодика. Может легче будет для восприятия твоим "умом". Хотя с таким подходом к вопросу не думаю, что так...
Просто сейчас это не самый главный вопрос моего чата поэтому я не буду на нём зацикливатся так сильно ...
во 2-х я когда чтото делаю ну или даже копирую чтото у кавота я пытаюсь разобратся что и как работает а если я этого не понимаю то мне както не по себе использовать фичу в каторой я 100% кода непонимаю .
вот
---
GAGARIN-NEW вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сослаться на второй элемент в объединении NeiL Общие вопросы C/C++ 1 01.06.2008 16:04
кто знает что за элемент Ec Tunel Skorpion2017 Компоненты Delphi 0 06.02.2008 04:12
Показать элемент по указанной позиции. Fuckin_Princess Помощь студентам 8 07.12.2007 12:07
Вспомогательный элемент LeoN Общие вопросы Delphi 1 07.09.2007 20:12