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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 20:05   #1
lostbananan
Пользователь
 
Регистрация: 16.02.2010
Сообщений: 11
По умолчанию DrawGrid непонятная ошибка в TextOut

Здравствуйте!
Помогите разобраться!!!
Написал такой код:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var s : String;
begin
TextOut(1, 1, 'Owner Drawn text');
end;
Компилятор ругается на коде с TextOut, что типы Интежер и Стринг несовместимы!
В чем подвох??
lostbananan вне форума Ответить с цитированием
Старый 03.03.2013, 20:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно ругается, ибо
Цитата:
BOOL TextOut(

HDC hdc, // handle of device context
int nXStart, // x-coordinate of starting position
int nYStart, // y-coordinate of starting position
LPCTSTR lpString, // address of string
int cbString // number of characters in string
);
Другое дело:
Код:
 TDrawGrid(Sender).Canvas.TextOut(Rect.Left, Rect.Top, 'Owner Drawn text');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.03.2013, 20:57   #3
lostbananan
Пользователь
 
Регистрация: 16.02.2010
Сообщений: 11
По умолчанию

Большое спасибо!!!

У меня на форме будет 11 DrawGrid, для всех них написал/:
Код:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var s : String;
begin
  case tag of
    1:  s := IntToStr(agres);
    2:  s := IntToStr(alcohol);
    3:  s := IntToStr(boss);
  end;
  TDrawGrid(Sender).Canvas.TextOut(35, 1, s);
end;
Но, почему-то текст в ячейки не выводится.
В чем здесь проблема?

Последний раз редактировалось Stilet; 04.03.2013 в 09:21.
lostbananan вне форума Ответить с цитированием
Старый 04.03.2013, 09:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В чем здесь проблема?
Во-первых в банальном неуважении к правилам форума: Код нужно выделять спецтегом.
Во-вторых в невнимательном читании того что тебе пишут. Сравни свое:
Цитата:
TextOut(35, 1, s);
и это:
Цитата:
TextOut(Rect.Left, Rect.Top, 'Owner Drawn text');
И найди отличия.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.03.2013, 09:28   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
case tag of  //  Form1.tag, Form1.DrawGrid1.tag, ... form1.DrawGrid11.tag какой из ?
(sender as TDrawGrid).tag
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.03.2013, 09:31   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Для всех них писать не надо, им всем надо назначить этот единственный обработчик события в инспекторе, и по тегу определять кто именно должен на себе отобразить.
Tag Вы непонятно откуда берёте - его надо брать тоже из грида TDrawGrid(Sender).Tag
phomm вне форума Ответить с цитированием
Старый 04.03.2013, 09:46   #7
lostbananan
Пользователь
 
Регистрация: 16.02.2010
Сообщений: 11
По умолчанию

Конречно обработчик события у меня один для все гридов, в операторе касе текст назначается в зависимости от тага грида...
Спасибо в обработчике события сделал изменения и заработала программа как надо:
Код:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var s : String;
begin
  case TDrawGrid(Sender).tag of
    1:  s := IntToStr(agres);
    2:  s := IntToStr(alcohol);
    3:  s := IntToStr(boss);
  end;
  TDrawGrid(Sender).Canvas.TextOut(35, 1, s);
end;

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)

Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 04.03.2013 в 10:02.
lostbananan вне форума Ответить с цитированием
Старый 04.03.2013, 10:01   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

lostbananan, Вы зря не читаете то, что Вам пишут!

Перечитывайте пост #4 (у Вас ошибка в параметрах TextOut ) до ПОЛНОГО прояснения!



p.s. И код нужно ФОРМАТИРОВАТЬ!!!

Последний раз редактировалось Serge_Bliznykov; 04.03.2013 в 10:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2013, 20:19   #9
lostbananan
Пользователь
 
Регистрация: 16.02.2010
Сообщений: 11
По умолчанию

Непонятные ошибки времени исполнения возникают.
Если программу запускаю в той директории в которой ее делал - ошибок нет, копируюю в другую директорию (вместе с ини-файлом) - ошибка аксес виолатион на чтение...
такая же ошибка возникает если немного изменить координаты эллементов.
Что это может быть и как с этим бороться?
А вообще, может кто подскажеть как создать "на лету" прогресьар и лабел?

Прбывал так:
Код:
Grid := TDrawGrid.Create(Sender);
так компилятор ругается: о несовместимости TComponent и TObject

Написал так:
Код:
    Grid := TDrawGrid.Create(Sender as TComponent);
  Grid.Left := 10;
  Grid.Top := 10;
  Grid.RowCount := 1;
  Grid.ColCount := 1;
  Grid.Show;
  Caption := Grid.ClassName();
Компилятор неругается, но драв грида на форме нету, а заголовок формы становиться TDrawGrid, т.е. грид я таки создал, но почему его невдно на форме?

Код такой написал и все заработало:
Код:
  Grid := TDrawGrid.Create(Form1);
  Grid.Left := 10;
  Grid.Top := 10;
  Grid.RowCount := 1;
  Grid.ColCount := 1;
  Grid.Enabled := true;
  Grid.Height := 120;
  Grid.Tag := 1;
  Grid.Cursor := crHandPoint;
  Grid.Parent:=Form1;
  Grid.Canvas.Brush.Color:=clBlack;
  Grid.Canvas.FillRect(Grid.CellRect(1,1));
  Caption := Grid.ClassName()+' tag='+IntToStr(Grid.Tag);
Остался вопрос как указать Гриду, созданому во время исполнения обработчик события?

Последний раз редактировалось Stilet; 05.03.2013 в 09:20.
lostbananan вне форума Ответить с цитированием
Старый 04.03.2013, 23:37   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
Tform1 =class(Tform)
  procedure MyDrawGrid(sender: Tobject;.....);
Код:
xxx:=TdrawGrid.Create(self);
....
xxx.OnDrawGrid:=MyDrawGrid;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная ошибка bandit58rus Visual C++ 9 04.06.2012 19:38
Непонятная ошибка RusseLfStyle Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2012 09:09
Непонятная ошибка fredwriter Общие вопросы C/C++ 19 28.10.2011 18:01
Непонятная ошибка Shurik(c) Помощь студентам 0 01.06.2011 20:34
Непонятная ошибка Lisёноk Помощь студентам 4 19.12.2010 15:08