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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2008, 16:37   #1
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
Подмигивание Stringgrid, Procedure, cells[m,n]:=DynMas[a,b]. Очередной вопрос начинающего (#003)

Есть процедура (которую мы пишем событии OnDrawCell)
Она нам закрасит ячейку 1/1 в красный цвет.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (ACol = 1) and (ARow = 1) then
begin
StringGrid1.Canvas.Brush.Color := clRed;
StringGrid1.Canvas.FillRect (Rect);

StringGrid1.Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol,ARow]);
end; {if}
end;

Вопросы:
1. Как написать процедуру, которая будет делать скажем тоже самое, только не при запуске программы, а только тогда , когда мы её будем вызывать сами, скажем нажатием кнопки.
Всякие вложения вида:
procedure TForm1.Button1Click(Sender: TObject);
begin


StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin

end;
Отчего-то не верны, хотя по логике вещей Мы нажатием кнопки Button1 пытаемся вызывать заранее заданную процедуру StringGrid1DrawCell
end;
Albert2008 вне форума Ответить с цитированием
Старый 01.08.2008, 17:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну если я правильно понял то например так:
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 StringGrid1.OnDrawCell:=nil;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if (ACol = 1) and (ARow = 1) then
begin
 StringGrid1.Canvas.Brush.Color := clRed;
 StringGrid1.Canvas.FillRect (Rect);
 StringGrid1.Canvas.TextRect (Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol,ARow]);
end; {if}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.OnDrawCell:=StringGrid1DrawCell;
StringGrid1.Invalidate;
end;

end.
Цитата:
Отчего-то не верны, хотя по логике вещей....
Как раз по правилам делфи логика такая тут совершенно не годится.
Ибо OnDrawCell вызывается когда нужно для каждой видимой ячейки, а ты даже по кнопке вызвав этот обработчик обработаешь всего одну ячейку.
I'm learning to live...

Последний раз редактировалось Stilet; 01.08.2008 в 17:09.
Stilet вне форума Ответить с цитированием
Старый 01.08.2008, 17:40   #3
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
По умолчанию

Полученный код скопировал в новый проект.
Скомпилировал. Ошибок вроде никаких нету. Но и результатов тоже.
Посмотрите пожалуйста.

Я не понимаю почему неверна логика, что сначала мы задаём одну функцию (или процедуру) а потом могли бы её вызывать в другой процедуре...
Albert2008 вне форума Ответить с цитированием
Старый 04.08.2008, 09:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но и результатов тоже.Посмотрите пожалуйста.
Я его перед тем как выкладывать тестил - результаты: закраска ячейки (1,1) красным по нажатию кнопки. Иши у себя ошибку.

Цитата:
Я не понимаю почему неверна логика, что сначала мы задаём одну функцию (или процедуру) а потом могли бы её вызывать в другой процедуре...
Неверно то как ты это вызываешь. Вот это твое "Всякие вложения вида:"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2008, 12:00   #5
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 Albert2008 - все работает ))) абсолютно точно ))
Создавай 3 события в делфи, как тебе написали - и все работает
Вложения
Тип файла: rar Str po viboru.rar (5.4 Кб, 14 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с многомерными массивами в функции. Очередной вопос начинающего (#005) Albert2008 Компоненты Delphi 14 13.08.2008 22:03
Procedure,function,Stringgrid (#004) Очередной вопрос начинающего. Albert2008 Компоненты Delphi 4 01.08.2008 21:30
Stringgrid, cells[m,n] и двумерные массивы.(#002) Очередной вопрос начинающего. Albert2008 Компоненты Delphi 4 28.07.2008 19:02
вопрос по php от начинающего sleeper_Izh PHP 15 11.07.2008 10:19
Видимо очередной вопрос по БД... Amaranth Помощь студентам 1 16.12.2007 00:56