Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сообщение TStringGrid что закончили редактировать ячейку, есть?


Страницы:   1 2

Kolan ©   (2007-06-16 09:56:00) 

OnSetEditTextнеподходит, так как возникает при редактировании постоянно(на каждое нажатие кнопки).
Можно ли как-то получить сообщение(событие) что редактирование закончено?


sniknik   (2007-06-16 15:30:00) [21]

> Ну как я закончил редактировать, но остался в той же ячейке.
значит не закончил раз остался, тк и через полчаса случайно нажатая кнопка это продолжение редактирования...
либо приводи логику для "остался", т.к. то что в [2] это выход.  

> А хде его смотреть?
дельфи поставляется с исходниками VCL.


Kolan   (2007-06-16 15:25:00) [22]

> а вовсе не завершение редактирования

Ну как я закончил редактировать, но остался в той же ячейке.


> посмотреть как тот самый InplaceEditor

А хде его смотреть?

> Пример с использованием TEdit:

Щас поглядим… :)


Loginov Dmitry   (2007-06-16 15:19:00) [23]

Пример с использованием TEdit:


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   StringGrid1: TStringGrid;
   procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
     var Value: String);
   procedure Edit1Exit(Sender: TObject);
   procedure Edit1KeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol,
 ARow: Integer; var Value: String);
var
 ARect: TRect;
begin
 ARect := StringGrid1.CellRect(ACol, ARow);
 ARect.TopLeft := ScreenToClient(StringGrid1.ClientToScreen(ARect.TopLeft));
 ARect.BottomRight := ScreenToClient(StringGrid1.ClientToScreen(ARect.BottomRight));

 Edit1.BoundsRect := ARect;
 Edit1.Text := StringGrid1.Cells[ACol, ARow];
 Edit1.Visible := True;
 Edit1.BringToFront;
 Edit1.SetFocus;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
 StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := Edit1.Text;
 Edit1.Visible := False;
 StringGrid1.SetFocus;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if Key = VK_RETURN then
 begin
   Edit1.OnExit(nil);
   Key := 0;
 end;
end;

end.


sniknik   (2007-06-16 15:14:00) [24]

> Нажимаю Enter/перехожу на другую ячейку
так тебе получается нужно событие выхода из ячейки?, а вовсе не завершение редактирования.

такого тоже вроде нет, но можно сделать..., возможно, посмотреть как тот самый InplaceEditor работает, и использовать его события, уничтожения (если он на каждое редактирование создается/уничтожается), либо другое если там както по другому организовано.
подставлять свой эдит тоже можно, но не так интересно...


Kolan   (2007-06-16 15:00:00) [25]

> InplaceEditor'a — тот же TEdit

Да, незнал…

Тогда подробнее можно.
Когда показывать Edit и как вычислить его кординаты?


Loginov Dmitry   (2007-06-16 14:54:00) [26]

> Есть же возможность редактировать прям ячейку


Ну она редактируется с помощью InplaceEditor'a - тот же TEdit, только гибкости - 0. А если хочется чего-то путного, то приемлемый выход - подстановка контролов.


Kolan   (2007-06-16 14:47:00) [27]

> Подставляй TEdit.

Хех еще посоветуй сделать сетку из N эдитов :)… Есть же возможность редактировать прям ячейку…


Loginov Dmitry   (2007-06-16 14:46:00) [28]

Подставляй TEdit. Об окончании редактирования будет сигнализировать его событие OnExit;


Kolan   (2007-06-16 14:35:00) [29]

> {RASkov}

Отослал…


Kolan   (2007-06-16 14:14:00) [30]

> [6] {RASkov} ©   (16.06.07 14:06)
> > [5] Kolan ©   (16.06.07 14:03)

Ок, шас вот эту проблему победу, а то редактировать противно.


{RASkov}   (2007-06-16 14:06:00) [31]

> [5] Kolan ©   (16.06.07 14:03)


Kolan   (2007-06-16 14:03:00) [32]

> {RASkov} ©  

ЗЫ 0 версия готова почти показать? Куда слать?


Kolan   (2007-06-16 14:00:00) [33]

> SetEditText

Не годится он. И имхо нужного вообще нет, я спрашиваю как можно достич нужного.

Смысл необходимости вот в чем:
Есть строка. S1— это модель.
Её отображаю в ячейке StringGrid — это view.

Если ячейку изменяют, то изменяется и строка S1.
И когда изменяется S1, то она говорит я изменилась — рисуйте меня и её рисуют в ячейки грида.

Так вот если использовать SetEditTextтакая синхронизация происходит постоянно, на каждом нажатии клавиши.


{RASkov}   (2007-06-16 13:54:00) [34]

> [2] Kolan ©   (16.06.07 13:31)

В таких случаях, когда не совсем понятен какой обработчик мне нужен, я поступаю так:
Создаю "подозреваемые" обработчики типа так

procedure TForm.StringGridSetEditText();
begin
 ShowMessage('StringGridSetEditText');
end;

И вылавливаю потом нужные
:)


Kolan   (2007-06-16 13:31:00) [35]

> и выразить словами

1. Вот я выбрал ячейку и еще не начал редактировать. Ячейка выбрана но не могу редактировать.
2. Жму на нее еще раз текст становится доступным для редактирования.
3. Редактирую сколько влезит.
4. Нажимаю Enter/перехожу на другую ячейку(те в текст снова стал НЕ доступен для редактирования). И вот тут мне и нужно об этом узнать…


sniknik   (2007-06-16 10:13:00) [36]

вряд ли... попробуй сам придумать (и выразить словами) когда считать что редактирование закончилось. (???) ну например если ничего не нажимали 3 мин, так чтоли? а автор отошел покурить (вот он, еще один неявный вред курения ;о))), вернулся через полчаса и продолжил набивать с половины слова.

в общем давай, предлагай, какая должна быть логика возникновения этого события?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо