Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Вопрос про Stringgrid   Найти похожие ветки 

 
Grol ©   (2005-10-30 01:55) [0]

На форму кинул Stringgrid, в options указал свойство goEditing, то есть открыт для редактирования. Компилю...
Если щелкнуть 2 раза мышкой по таблице (по какой-нибудь ячейке), то для редактирование активизируется данная ячейка (т.е в ячейке будет мигать курсор). Так вот вопрос такой, когда я активизирую Stringgrid для редактирования, добавляется ли какая-нибудь информация в компонент  Stringgrid  о том, что таблица была активизированна для редактирования? Если да, то тогда будет ли эта информация сохраняться даже, если я уберу фокус со  Stringgrid на какой-нибудь контрол? И как тогда удалить эту информацию из  Stringgrid , как будто я и не активизировал таблицу на редактирование. Спасибо заранее за ответы и оказанную мне помощь в решении этого вопроса.


 
Baltika-26   (2005-10-30 01:59) [1]

Где-нибудь да ответят. Только вряд ли стараться будут на нескольких сайтах сразу отвечать.


 
Grol ©   (2005-10-30 02:42) [2]

Только таким образом можно добиться ответа в форумах. Разве не так?.....
Но не буду флеймить эту тему.


 
GanibalLector ©   (2005-10-30 02:54) [3]

2 Grol
>будет ли эта информация сохраняться даже, если я уберу фокус со  Stringgrid на какой-нибудь контрол?
Ну,если создашь наследника TSringGrid ,то будет ;)
> как тогда удалить эту информацию из  Stringgrid

procedure ClearGrid(Grid:TStringGrid);
var I:Integer;
begin
  for I:=1 to Grid.RowCount-1 do
    Grid.Rows[I].Clear;
end;



 
Baltika-26   (2005-10-30 02:58) [4]

>Grol
Это называется СПАМ.


 
Grol ©   (2005-10-30 19:34) [5]

Короче скажу так: если создавать дубликат компонента Stringgrid после ее активации на редактирование (в ячейки я ничего не заносил, а просто перевел на них фокус, чтоб курсор был в одной из ячеек таблицы), то почему-то когда я переношу информацию о Stringgride в TMemoryStream, для того чтоб создать дубликат этого компонента, то в TMemoryStream записывается и информация о TinplaceEdit, а в некоторых случаях даже выдается ошибка при создании дубликата. А если не активировать редактор, то операция клонирования компонента Stringgrid получается без проблем. Надеюсь, что сейчас вопрос уеснен. Спасибо тем, кто помогает мне!


 
Grol ©   (2005-10-30 20:39) [6]

Помогите...Help..Help...Help me...или просто вопрос слишком сложный, даже нитак, нерешимый. :(((


 
Grol ©   (2005-10-30 23:12) [7]

Мастера.....где ВЫ, мне нужна ВАША помощь.........спасибо всем кто помог мне!


 
GanibalLector ©   (2005-10-31 00:29) [8]

А что мешает проверить активен ли TInplaceEdit? Соответственно,если активен то предпринять какие либо действия : либо сообщение пользователю либо принудительно SetFocus  куда-нибудь. Для проверки существования TInplaceEdit используй FindWindow(Ex)


 
Grol ©   (2005-10-31 01:41) [9]

И так...еще раз...поподробней. Вообще, что мне нужно: я хочу создать на форме клон (копию) [b]Stringgrid 1[/b]. Еще до компиляции программы у меня на форме есть [b]Stringgrid 1[/b] и кнопка, в которой код создания второго [b]Stinggrid 2[/b].

1 ситуация: Компилирую. По нажатию мной на кнопку. Создается [b]Stringgrid 2[/b], c такими же свойствами как и у [b]Stringgrid 1[/b]. Пока все нормально. Декомпилю.

2 ситуация: Снова компилю прогу. А теперь делаю так: перед тем как создавать [b]Stringgrid 2[/b], я щелкаю 2 раза мышкой по [b]Stringgrid 1[/b]. [b]Stringgrid 1[/b] активизируется на редактирование, т.е. куда я щелкнул в ячейке начал мигать курсор...ну а теперь жму на кнопку для создания [b]Stringgrid 2[/b]. И что же я вижу? Ага...ошибка! [b]Access Violation[/b] (То есть ошибка доступа к памяти). Все очень плохо. Выгружаю прогу.

3 ситуация: Помещаю на форму [b]edit[/b]. Компилирую. Щелкаю 2 раз по [b]Stringgrid 1[/b], активизируя режим редактирования таблицы. Перевожу мышкой фокус со [b]Stringgrid 1[/b] в [b]edit[/b] и жму на кнопку. Опять эта ошибка.

   То есть, как я говорил раннее, в свойствах [b]Stringgrid 1[/b] или где-то...я не знаю где, сохраняется информация о том, что я когда-то активировал редактор [b]Stringgrid 1[/b] и поэтому к этой таблице нет доступа, ошибка тому доказательство.

[b]Спасибо всем![/b]


 
GanibalLector ©   (2005-10-31 03:02) [10]

2 Grol ©   (31.10.05 01:41) [9]
Да понял я ,понял. Тут два варианта : либо удалять TInplaceEdit до сохранении в Stream либо создавать . В общем ...проще создавать ) Конечный результат выглядит так :

function CloneGrid(Src: TStringGrid; const NewName: string): TStringGrid;
var
n : integer;
MS : TMemoryStream;
StrStream: TStringStream;
s, buf : string;
begin
MS := TMemoryStream.Create;
StrStream := TStringStream.Create(s);
try
  MS.WriteComponent(Src);
  MS.Position := 0;
  ObjectBinaryToText(MS, StrStream);

  StrStream.Seek(0, soFromBeginning);
  buf := StrStream.DataString;
finally
  StrStream.Free;
  MS.Free;
end;

n := Pos(Src.Name, buf);
if n > 0 then begin
  Delete(buf, n, Length(Src.Name));
  Insert(NewName, buf, n);
end;

MS := TMemoryStream.Create;
StrStream := TStringStream.Create(buf);
try
  ObjectTextToBinary(StrStream, MS);
  MS.Position := 0;
  RegisterClass(TInplaceEdit); // теперь будет работать ))
  result := TStringGrid.Create(Src.Owner);
  result.Parent := Src.Parent;
  MS.ReadComponent(result);
finally
  StrStream.Free;
  MS.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
r, x : integer;
begin
with CloneGrid( StringGrid1, "NewStringGrid") do
begin
  Left := 0;
  r := 0;
  while r < StringGrid1.RowCount do
  begin
    Rows[r].Assign(StringGrid1.Rows[r]);
    Inc(r);
  end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 StringGrid1.Left:=250;
end;


 
GanibalLector ©   (2005-10-31 03:04) [11]

Кстати,мои догадки в [8] неверны ;) Бывает ))


 
Grol ©   (2005-10-31 18:19) [12]

GanibalLector спасибо за помощь, сейчас буду пробовать... :)))


 
SaF22   (2005-11-01 13:23) [13]

Братка, может это чем то тебе поможет:
procedure Draw(Sender: TObject; ACol, ARow: Longint; Rect: TRect;
State: TGridDrawState);
State - это состояние ячейки гридаб может принимать след. значения:
(gdSelected,gdFocused,gdFixed)


 
SaF22   (2005-11-01 13:27) [14]

if gdFocused in State
 Then...


 
GanibalLector ©   (2005-11-02 02:10) [15]

2 SaF22
Вы это о чем???



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.155 c
3-1129040707
AlexLines
2005-10-11 18:25
2005.11.20
поиск и маркировка поисковых фраз


11-1093729013
Sormy
2004-08-29 01:36
2005.11.20
Delphi 7.0 Вылетает...


5-1110306238
Monk
2005-03-08 21:23
2005.11.20
Классы дельфы


14-1130405707
Prohodil Mimo
2005-10-27 13:35
2005.11.20
Вопрос по WMWare


1-1130402074
Rentgen
2005-10-27 12:34
2005.11.20
Загрузка формы из библиотеки?