![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Столкнулась с интересной проблемой.
Есть форма с StringGrid, При нажатии ячейки я ввожу туда значения в виде (счет1) : (счет2). Делала я это с помощью TMaskEdit. И все работало: Код:
procedure TForm2.MaskEdit1Change(Sender: TObject); begin StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:=MaskEdit1.Text; end; procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin MaskEdit1.Visible := false; if (gdFocused in State) then begin if (ACol<>ARow) then begin MaskEdit1.Visible := true; MaskEdit1.Text:=StringGrid1.Cells[ACol, ARow]; MaskEdit1.Left := Rect.Left + StringGrid1.Left+2; MaskEdit1.Top := Rect.Top + StringGrid1.top+2; MaskEdit1.Width := Rect.Right - Rect.Left; MaskEdit1.Height := Rect.Bottom - Rect.Top; exit; end; end; end; Но для полной красоты мне не хватало указания времени когда проходила игра. Я решила добавить форму в которую записывались результаты и время. Добавила кнопку и прописала в ней событие открытия формы, но выкидывалась ошибка и я решила сначала сделать с помощью Message. С ним тоже проблем не возникло. Код:
procedure TForm2.StringGrid1Click(Sender: TObject); begin bt:=true; end; procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (bt=true) then //добавила, что бы срабатывало 1 раз после клика Begin if (gdFocused in State) then begin if (ACol<>ARow) then begin bt:=false; ShowMessage('llllll'); exit; end; end; end; end; А вот если заменить Message на вызов формы - возникают проблемы. Запустить форму как Form.ShowModal, не выходит, только как просто Form.Show. Форма запускается, но открывается на всю форму в которой прописан StringGrid и не поддается редактированию. Закрыть ее тоже не удается. Фактически программа виснет. Код:
procedure TForm2.btn3Click(Sender: TObject); begin bt:=True; if (not Assigned(Form4)) then Form4:=TForm4.Create(Self); Form4.Show; end; procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (bt=true) then Begin if (gdFocused in State) then begin if (ACol<>ARow) then begin bt:=false; btn3.Click; exit; end; end; end; end; Подскажите как это исправить ![]() По переживать и по сокрушаться - я всегда успею. Так что, дайте мне порадоваться в свое удовольствие! |
#2
|
|||
|
|||
![]() Попробуй так:
Код:
procedure TForm2.btn3Click(Sender: TObject); begin bt:=True; if (not Assigned(Form4)) then Application.CreateForm(TForm4, Form4);// <----- Form4.Show; end; <exit;> - лишнее Последний раз редактировалось icsander, 23.11.2012 в 18:22. |
#3
|
||||
|
||||
![]() Вообще никак не реагирует. Предлагает просто ввод в ячейку, форму не вызывает.
По переживать и по сокрушаться - я всегда успею. Так что, дайте мне порадоваться в свое удовольствие! |
#4
|
|||
|
|||
![]() Ну вообще вызов модальной формы в DrawCell не очень хорошая идея. Лучше перенести ее в StringGridDblClick либо в StringGridClick (не совсем удобно выделить ячейку или строку).
Код:
procedure TForm2.StringGridDblClick(Sender: TObject); begin Application.CreateForm(TForm4, Form4); Form4.Edit1.Text:=StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];//На Form4 есть Edit1, ему и передаем значение ячейки Form4.ShowModal; StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:=Form4.Edit1.Text;//Новый текст в ячейку Form4.Free;//Убиваем форму end; |
Этот пользователь сказал Спасибо icsander за это полезное сообщение: | ||
Edinora (23.11.2012)
|
#5
|
||||
|
||||
![]() Нет, все-таки реагирует, но так же как и в предыдущем случае.
По переживать и по сокрушаться - я всегда успею. Так что, дайте мне порадоваться в свое удовольствие! |
#6
|
|||
|
|||
![]() Подробнее опишите, что и как реагирует.
И если можно выложите весь проект (в архиве). |
#7
|
||||
|
||||
![]() ![]() Если пишу просто Form.show ошибка та же. ![]() По переживать и по сокрушаться - я всегда успею. Так что, дайте мне порадоваться в свое удовольствие! |
#8
|
|||
|
|||
![]() Ну так надо ShowModal. По Show форма сразу и закрывается, если смотреть по коду.
|