Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 24.10.2011, 03:21   #1
Grass-snake
Новичок
Джуниор
 
Регистрация: 24.10.2011
Сообщений: 2
По умолчанию StringGrid: вставка картинок

Всем привет!
У меня появилось задание: нужно нарисовать кружок (Canvas) в ячейке StringGrid, но только текстом с текстом.
Например так: "Текст + Круг + Текст". Все это в одной ячейке.
Так, чтобы ни текст, ни круг не перекрывали друг друга. Когда пытаюсь это сделать, получается что круг рисуется поверх текста.

Если необходимо, могу загружать картинку из TImageList.
Если обычный StringGrid не может это, готов использовать другой компонент, аналог StringGrid.
Редактирование текста не нужно.
Grass-snake вне форума Ответить с цитированием
Старый 24.10.2011, 08:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
Когда пытаюсь это сделать, получается что круг рисуется поверх текста.
Видать координаты путаешь. Показывай как отрисовываешь, все там норм:
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1]:='текст1 текст2';
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var i,p:integer;
begin
 with TStringGrid(sender) do begin
   if Cells[ACol,ARow]='' then exit;
   Canvas.FillRect(Rect);
   p:=pos(' ',Cells[ACol, ARow]);
   i:=Canvas.TextWidth(copy(Cells[ACol, ARow],1,p));
   Canvas.TextOut(Rect.Left,Rect.Top,copy(Cells[ACol, ARow],1,p));
   Rect.Left:=Rect.Left+i;
   Canvas.Ellipse(Rect.Left,Rect.Top,Rect.Left+10,Rect.Top+10);
   Rect.Left:=Rect.Left+10;
   Canvas.TextOut(Rect.Left,Rect.Top,copy(Cells[ACol, ARow],p,Length(Cells[ACol, ARow])));
 end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.10.2011, 15:00   #3
Grass-snake
Новичок
Джуниор
 
Регистрация: 24.10.2011
Сообщений: 2
По умолчанию

Спасибо большое за код, всё работает!
А я просто рисовал текст на канве...
Grass-snake вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка данных в шаблон документа в ячейку Excel из StringGrid artemavd Общие вопросы Delphi 4 29.05.2011 14:49
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 17:58
Вставка картинок в текстовый документ PONKA Общие вопросы Delphi 0 04.02.2009 13:54
Вставка столбца в StringGrid artemavd Общие вопросы Delphi 8 29.07.2008 17:48
Вставка в stringgrid combobox-а. Иван1 Компоненты Delphi 3 25.05.2007 09:12