Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi]bitmap в strinngrid 
:(
    Опции темы
belmax
Дата 9.4.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



по кликанью по ячейки вставить в ячейку bitmapовский рисунок

(пожалуйсто полный код )спасибо 
PM MAIL   Вверх
ivan219
  Дата 10.4.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Так там метод Cavas есть по Bibmap надо посмотреть вот через Canvas и можно вывести рисунок.
А какого рода картинки там будут?
PM MAIL ICQ   Вверх
ivan219
  Дата 10.4.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Пример взят из DRKB
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ExtCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Bitmap: TBitmap;
implementation

{$R *.dfm}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 with (Sender as TStringGrid) do
  with Canvas do
   Draw(Rect.Left, Rect.Top, Bitmap);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Bitmap:=TBitmap.Create;
 Bitmap.LoadFromFile('1.bmp');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Bitmap.Free;
end;
end.


Добавлено через 1 минуту и 23 секунды
Или ещё проще.
Код

StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, Bitmap);


Добавлено через 13 минут и 27 секунд
А вот так картинка появляется там где ты кликаеш мышю.
Код

var
  Form1: TForm1;
  Bitmap: TBitmap;
  FARow, FACol: Integer;
  FChecked: Boolean=False;
implementation

{$R *.dfm}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if FChecked then
  if ACol=FACol then
   if ARow=FARow then
    StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, Bitmap);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Bitmap:=TBitmap.Create;
 Bitmap.LoadFromFile('1.bmp');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Bitmap.Free;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
 FARow:=ARow;
 FACol:=ACol;
 FChecked:=True;
end;
end.

PM MAIL ICQ   Вверх
ZBugz
Дата 18.5.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как сделать тоже самое, вставить картинку в первую ячейку, но из ImageList, а то я не нашел примера  smile  



Это сообщение отредактировал(а) ZBugz - 21.5.2007, 08:04
PM MAIL   Вверх
Alexeis
Дата 22.5.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Misha_White
Дата 22.5.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



belmax, 
А DrawGrid нельзя использовать?
--------------------
Я не волшебник... я только учусь...  
PM MAIL ICQ Skype   Вверх
ZBugz
Дата 23.5.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alexeis @ 22.5.2007,  09:57)
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена!

Причем тут это ?  smile  Я так понял тут вообще никто про это незнает, раз не ответили, включая вас или не хотят отвечать.

Добавлено через 1 минуту и 8 секунд
Цитата(Misha_White @ 22.5.2007,  13:08)
belmax, 
А DrawGrid нельзя использовать?

Да я уже проект написал для StringGrid, а переделывать неохота, слишком много переделок в самом компоненте.
PM MAIL   Вверх
Alexeis
Дата 23.5.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Цитата(ZBugz @  23.5.2007,  08:27 Найти цитируемый пост)
Причем тут это ?
 Выбирая, закрыть бойанчег или переместить его в раздел для начинающих, я выбрал второе. 

Цитата(ZBugz @  18.5.2007,  15:08 Найти цитируемый пост)
А как сделать тоже самое, вставить картинку в первую ячейку, но из ImageList, а то я не нашел примера


  Да тоже самое только вместо  StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, Bitmap);

будет ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, Index);

Где Index - это номер картинки в ImageList1.



Это сообщение отредактировал(а) Alexeis - 23.5.2007, 09:08


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ZBugz
  Дата 23.5.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Супер, все работает.  smile 

M
Guedda
Не забываем отмечать вопрос решенным!


Это сообщение отредактировал(а) Guedda - 23.5.2007, 09:48
PM MAIL   Вверх
ZBugz
Дата 25.5.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да я хотел отметить, только вот не нашел галочку эту, может потому что не я тему создовал ?  smile

Добавлено @ 12:51
Alexeis, есче вопросик, а как сделать так, чтоб картика, точнее картинки, к примеру у меня 10 строк и 10 столбцов, запихивались во все 10 строк, 1-го столбца подряд ?  smile А то при загрузке данных, картинка загружается только в последней строке.

Вот мой кусок кода, который запихивает картинку.

Код

if fileexists(F) then
    begin
 assignfile(d, F);
  reset(d);
  readln(d, temp);
  list.colcount := temp;
  readln(d, temp);
  list.rowcount := temp;
  for X := 1 to list.colcount - 1 do
    for y := 1 to list.rowcount - 1 do
    begin
      readln(d, tempstr);
      list.cells[x, y] := tempstr;
      
      FARow:=Y; ///<- Вот тут картинка показывается
      FACol:=0;
      FChecked:=True;

    end;
  closefile(d);
 end;



M
Guedda
Выбирайте правильную подсветку кода!


Это сообщение отредактировал(а) Guedda - 25.5.2007, 13:01
PM MAIL   Вверх
Alexeis
Дата 25.5.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Цитата(ZBugz @  25.5.2007,  12:47 Найти цитируемый пост)
Вот мой кусок кода, который запихивает картинку.

  ничего не понятно, что это такое и где вызывается. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ZBugz
Дата 25.5.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 
Щас, вот так:
Код

procedure TMainForm.ListDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if FChecked then
  if ACol=FACol then
   if ARow=FARow then
LvImageList.Draw(List.Canvas, Rect.Left, Rect.Top, 0);
end;


Код

// Этоя загружаю данные из файла
F:=Ini.ReadString('Generals','SaveList', ExtractFilePath(Application.ExeName)+'sll.sll');
 If Pos('|',F)>0 then F:= Copy(F, 1, Pos('|',F)-1);

 if fileexists(F) then
    begin
 assignfile(d, F);
  reset(d);
  readln(d, temp);
  list.colcount := temp;
  readln(d, temp);
  list.rowcount := temp;
  for X := 1 to list.colcount - 1 do
    for y := 1 to list.rowcount - 1 do
    begin
      readln(d, tempstr);
      list.cells[x, y] := tempstr;
      FARow:=Y;
      FACol:=0;
      FChecked:=True;
    end;
  closefile(d);
 end;
Ini.Free;


Ну вот
Код

 FARow:=Y;
      FACol:=0;
      FChecked:=True;


Отрисовывает картинку, по идее он в цикле должен отрисовать в 0 столбце, количество картинок, равное количиству строк, а он только последнюю строку отрисовывает.
PM MAIL   Вверх
Alexeis
Дата 25.5.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



ну так вместо нуля вот тут LvImageList.Draw(List.Canvas, Rect.Left, Rect.Top, 0);
указывай нужный индекс.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ZBugz
Дата 25.5.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Этоя наверное как всегда криво написал smile Иконка то рисуется, но одна и в последнем строке, а я же в цикл спеуиально загнал, чтоб иконка во всех столбцах нарисовалась, а она почему то тока в последенем  smile 
PM MAIL   Вверх
Alexeis
Дата 25.5.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Цитата(ZBugz @  25.5.2007,  14:33 Найти цитируемый пост)
а я же в цикл спеуиально загнал, чтоб иконка во всех столбцах нарисовалась, а она почему то тока в последенем

 

  Причем здесь цикл? Обработчик вызывается изнутри. Не нужно ничего дополнительно вызывать
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, ARow);
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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