IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Вызов события, OnDrawCell
Cheburashka
сообщение 27.06.2010 18:21
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


В общем я хочу чтобы у меня после какого-то действия вызывалась процедура OnDrawCell для StringGrid'a.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);

Подскажите пожалуйста как можно эту процедуру вызвать из какого-либо участка кода?


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 30.06.2010 16:56
Сообщение #2


Гость






Ну, например, написать вот такую вот функцию:

// В классе формы:
private
{ Private declarations }
function GetIndexes(AImage: TImage; var ALine, ACol: Integer): Boolean;

// ...

// Реализация: пробегаем по всей матрице Panel-ей, и проверяем
// хранящееся в каждой из них изображение (выше мы уже выяснили,
// что Image хранится в списке дочерних компонентов под нулевым номером)
// на равенство тому изображению, по которому щелкнули мышью.

// Если такое изображение найдено - немедленно возвращаем
// его координаты (Line/Col) и выходим. Если ни одно изображение
// не соответствует - функция вернет False, как признак неудачи.
function TForm1.GetIndexes(AImage: TImage;
var ALine, ACol: Integer): Boolean;
var i, j: integer;
begin
result := True;
for i := 0 to Length(arrPanels) - 1 do
for j := 0 to Length(arrPanels[0]) - 1 do
if (arrPanels[i, j].Components[0] as TImage) = AImage then
begin
ALine := i; ACol := j;
Exit;
end;
result := False;
end;

// Вызывать - вот так:
procedure TForm1.myImageClick(Sender: TObject);
var
myParent: TPanel;
Line, Col: integer;
begin
myParent := (Sender as TImage).Parent as TPanel;

// Вызываем функцию с учетом того, что может быть неудача - это нужно делать
// всегда, даже если тебе это кажется невероятным. Мало ли что может произойти,
// лучше добавить if ... then, чем потом сидеть и думать, где ошибка.

// Теперь о том, что передается первым параметром. Как известно, в обработчик
// OnClick передается указатель на тот объект, на котором произошел щелчок мышью.
// Соответственно, и в myImageClick тоже будет передан адрес того объекта (а точнее -
// того изображения), на котором пользователь щелкнул мышью. Вот именно потому, что
// я уверен: "Объект - это именно изображение, и ничего кроме него" (почему я уверен
// в этом - попробуй догадаться и рассказать мне), я и передаю в GetIndexes адрес
// объекта, приведенный к типу TImage... Что произойдет, если вдруг Sender будет
// другого типа - это тоже ты мне расскажешь, договорились?

if GetIndexes(Sender as TImage, Line, Col) then
Memo1.Lines.Add(Format('i = %d, j = %d', [Line, Col])); // Для теста - вывожу в мемо

myParent.OnClick(myParent);
end;

Читай комментарии внимательно. Там есть два вопроса для тебя smile.gif Я очень хотел бы, чтобы ты на них ответил. Это важно.
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Сергей Меркурьев   Вызов события   27.06.2010 18:21
Unconnected   Ну так и вызываешь, form1.StringGrid1DrawCell(Send...   27.06.2010 18:35
Сергей Меркурьев   Так ему Sender не нравится... Пишет следующее [Err...   27.06.2010 18:37
volvo   Налицо ошибка проектирования. Событие не должно вы...   27.06.2010 19:40
Сергей Меркурьев   Что касается видимости ячеек, то этого у меня не п...   27.06.2010 19:52
volvo   Похоже, ты не понимаешь основ событийного программ...   27.06.2010 20:32
Сергей Меркурьев   Хорошо объясню ситуацию по конкретнее. Спасибо что...   27.06.2010 20:41
volvo   Не использовать StringGrid для работы с изображени...   27.06.2010 23:35
Сергей Меркурьев   Вы везде употребляете слово "автоматически...   28.06.2010 9:47
Unconnected   Ну наверное имелось в виду при запуске программы с...   28.06.2010 11:46
volvo   Когда я говорю "автоматически" - подразу...   28.06.2010 12:03
Сергей Меркурьев   Действительно, оказывается всё настолько просто :)...   28.06.2010 15:04
Client   Думаю, что этот обработчик надо установить для все...   28.06.2010 16:18
volvo   Комментарии к коду читал? Там все написано. А во ...   28.06.2010 17:15
Сергей Меркурьев   Спасибо!   28.06.2010 17:37
Сергей Меркурьев   А вот еще один вопрос по поводу первых процедур - ...   30.06.2010 16:34
volvo   Ну, например, написать вот такую вот функцию: // ...   30.06.2010 16:56
Сергей Меркурьев   А как сделать обмен таких изображений, зная коорди...   30.06.2010 18:34
Client   А что ты делаешь если надо поменять 2 переменные ц...   30.06.2010 19:00
Сергей Меркурьев   b1 := arrPanels[x,y].Components[0] as TImage; ...   30.06.2010 19:03
Client   свойство Picture тоже поменяй   30.06.2010 19:20
volvo   Этого недостаточно. Такой способ сработает только ...   30.06.2010 19:39
Сергей Меркурьев   volvo, в общем-то я затрудняюсь ответить на Ваши в...   1.07.2010 8:42


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.06.2025 6:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"