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

Вниз

Как копировать в StringGrid?   Найти похожие ветки 

 
ida   (2004-07-04 12:51) [0]

Как использовать стандартные: Вставить, Копировать в StringGrid?
Обещанная везде работать:
var Mes:TWMCut;
begin
Mes.Msg:=WM_CUT;
Screen.ActiveControl.Dispatch(Mes);
if ActiveControl is TWrapGrid then
with TWrapGrid(ActiveControl).dataSource.DataSet do Edit
end;
выдает ошибку неизвестных переменых.
Помогите,плз.


 
TUser ©   (2004-07-04 13:25) [1]

Что такое "ошибка неизвестных переменных"?
Накак по-другому до DataSet"а добраться нельзя?
Кто обещал и главное что? Dispath(WM_CUT) вовсе не обязан чего-то вырезать.
И зачем делать потом Edit?


 
GanibalLector ©   (2004-07-04 14:03) [2]

procedure TFrame3.ClearGrid(Grid: TStringGrid);
var x, y: integer;
begin
with Grid do begin
for y := Selection.Top to Selection.Bottom do begin
for x := Selection.Left to Selection.Right do Cells[x, y] := "";
                                               end;
               end;
end;

procedure TFrame3.CopyGrid(Grid: TStringGrid; Cut: boolean);
// при Cut = false происходит Copy, а при true Cut
var x, y: integer;
  str: string;
begin
str := "";
with Grid do begin
for y := Selection.Top to Selection.Bottom do begin
for x := Selection.Left to Selection.Right do begin
          str := str + Cells[x, y];
          if Cut then Cells[x, y] := "";
          if x < Selection.Right then str := str + #9;  //только если несколько в ширину
end;
if y < Selection.Bottom then str := str + #13 + #10;
end;
end;
str:=str+#13+#10;  //можно не делать,но по аналогии с Excel
str := str + #0 + #0;
ActivateKeyboardLayout(LoadKeyboardLayout("00000419",0),0);  //дабы не было проблем с экспортом!
Clipboard.AsText := str;
end;

procedure TFrame3.PasteGrid(Grid: TStringGrid; Ignore: boolean);
var x, y, i,oldx,oldy: integer;
  str, str2: string;  En:boolean;
  Myrect:TgridRect;
begin
str := Clipboard.AsText;
if (str[length(str)]=#10) and (str[length(str)-1]=#13) then
delete(str,length(str)-1,2);  // если это не сделать,то после вставки,он не
//коректно будет закрашен

//если только одна ячейка то так!
x:=0;y:=0;
for i:=1 to length(str) do begin
if str[i]=#9 then x:=x+1;
if str[i]=#13 then y:=y+1;
end;
if (x=0) and (y=0) then begin
  with Grid do begin
  for y := Selection.Top to Selection.Bottom do begin
  for x := Selection.Left to Selection.Right do
   Cells[x, y] :=str ;
    end;end;
               end else begin
     i:=1;     //а это если много!
     str:=str+#9+#9;
     y:=Stringgrid1.row;
     x:=Stringgrid1.col;
     oldx:=Stringgrid1.col;
     oldy:=Stringgrid1.row;
 while (i < Length(str)) do begin
     str2:="";
  while (str[i] <> #09) and (str[i] <> #13) and (str[i] <> #10)  and
     (i < Length(str))  do begin
     str2:=str2+str[i]; inc(i);
                           end;
     if str2<>"" then begin stringgrid1.Cells[x,y] :=str2;En:=true;end else en:=false;
     if str[i]=#9 then begin
                       if En=false then begin stringgrid1.Cells[x,y]:="";end ;
                       x:=x+1;
                       end;
     if str[i]=#13 then begin
                       if En=false then begin stringgrid1.Cells[x,y]:=""; i:=i+1;end
                       else i:=i+1;
                       y:=y+1;  x:=oldx;
                       end;
                       i:=i+1;
                                         end;
  // закрасим вставленное
  myRect.Right := oldx;
  myRect.Left := x-1;
  myRect.Top := oldy;
  myRect.Bottom := y;
  with Stringgrid1 do begin
  Selection:=myRect;end;
  end;
end;

procedure TFrame3.StringGrid1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
stringgrid1.Options := stringgrid1.Options + [goEditing];
if [ssCtrl] = Shift then
  case Key of
    Ord("C"), VK_INSERT: CopyGrid(Sender as TStringGrid, false);
    Ord("V"): PasteGrid(Sender as TStringGrid, false);
    Ord("X"): CopyGrid(Sender as TStringGrid, true);
  end;
if key = vk_delete then  clearGrid(StringGrid1);
if [ssShift] = Shift then
  case Key of
    VK_INSERT:PasteGrid(Sender as TStringGrid, false);
  end;
if key = vk_return then begin
if Stringgrid1.Row>=Stringgrid1.RowCount-1 then
Stringgrid1.row:=Stringgrid1.row else
Stringgrid1.row:=Stringgrid1.row+1;
Stringgrid1.EditorMode:=true;end;
end;

procedure TFrame3.StringGrid1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var X2, Y2: integer;
begin
if Button = mbLeft then
  with Sender as TStringGrid do begin
    MouseToCell(X, Y, X2, Y2);
    if (X2 <> LastX) or (Y2 <> LastY) then
      Options := Options - [goEditing]
    else
      begin
        Options := Options + [goEditing];
        OnMouseDown := nil;
        //Perform(WM_LBUTTONDOWN, MK_LBUTTON, Y * 65536 + X);
        OnMouseDown := StringGrid1MouseDown;
      end;
    LastX := X2;
    LastY := Y2;
  end;
end;

ТИПА вот ТАК!!! Я на этот САБЖ потратил МЕСЯЦ,млин.


 
KSergey ©   (2004-07-04 15:03) [3]

Я так нифига и не понял.

> ida   (04.07.04 12:51)
> Как использовать стандартные: Вставить, Копировать в StringGrid?
...
> with TWrapGrid(ActiveControl).dataSource.DataSet do Edit

Я не пойму про что таки разговор.
Про данные в StringGrid или DataSet???
И еще. А хоть есть уверенность, что ActiveControl - именно гридом окажется? (да и нафиг тут прям таки Wrap, если идет обращение к вполне доступным и не скрытым методам? Впрочем, это уже терминологическая придирка.)

"Обещанная везде работать:" кем обещано????? Ткните пальцем, плиз.
Я его тогда тоже побью! Нифига оно не везде работает! Либо врет нагло, либо не доделал! Дайте мне его! ;)


 
ida   (2004-07-04 15:08) [4]

Undeclared identifier

Пробовал с помощью.: Screen.ActiveControl.Dispatch(WM_COPY);
Не работает.

Не работает даже процедура активации пунктов динамического меню:
if ActiveControl is TWrapGrid then begin
with TcustomEdit(ActiveControl) do
 begin
 N12.Visible:=SelLength>0;
 N10.Visible:=SelLength>0;
 N11.Visible:=ClipBoard.HasFormat(CF_TEXT);
 end;
end else
begin
N12.Visible:=false;
N10.Visible:=false;
N11.Visible:=false;
end;


 
KSergey ©   (2004-07-04 15:23) [5]

> if ActiveControl is TWrapGrid then begin
> with TcustomEdit(ActiveControl) do

Ого! Мощно задвинул...
Мммм... а как оно по-вашему должно работать, интересно? И что такое N12 и т.п.?

И главное: ответьте таки на вопросы в [3] KSergey ©   (04.07.04 15:03)


 
ida   (2004-07-04 15:33) [6]

Господа, не издевайтесь, программирую не давно. Приведенные примера взяты из книжки Озерова, и переделаны как смог, не смейтесь, ибо не пнимаю до конца, что творю. Речь идет о данных в строке WrapGrid"а - это переделанный из StringGrida, умеющий переносить строки.


 
KilkennyCat ©   (2004-07-04 15:35) [7]


> KSergey ©   (04.07.04 15:23) [5]


да вроде все видно :) Nномерные - пункты меню, sellength относится уже к КастомЕдиту... А как оно должно работать - хрен его знает. Раз итемы меню всегда не видны, значит, либо if ActiveControl is TWrapGrid then  всегда ложен, либо выделение всегда нет и в буфере всегда все, что угодно, но только не текст. Что маловероятно. Вывод? проверка не правильна. а если правильна, значит никогда не вызывается.


 
KilkennyCat ©   (2004-07-04 15:37) [8]


> ida   (04.07.04 15:33) [6]


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


 
KilkennyCat ©   (2004-07-04 15:38) [9]


> KilkennyCat ©   (04.07.04 15:37) [8]


Я имею ввиду, страшных для меня.


 
ida   (2004-07-04 15:40) [10]


> KilkennyCat ©  

Да какая мне разница чем они там будут активированы, я уже попробовал 3 варианта и не один не пашет. Помогите, плз!!


 
ida   (2004-07-04 15:43) [11]


> И еще. А хоть есть уверенность, что ActiveControl - именно
> гридом окажется?

У меня на форме тока один етот грид. Я думаю, окажется..


 
KilkennyCat ©   (2004-07-04 15:53) [12]


>
> ida   (04.07.04 15:40) [10]


у Вас только один грид? к которому привязан попап? так замечательно! определяйте состояние менюшек в событии их вызова. И как-нить попроще для начала, без столь глобально-объектных обращений и With. адресуйтесь непосредственно к единственному гриду. Думаю, использование всего этого ужаса (для меня) выгодно в случае множественных обращений.


 
KSergey ©   (2004-07-04 19:46) [13]

2 ida

Утверждаете, что WrapGrid этот переделан из StringGtid
А что тогда DataSet??? Это для DBGrid подходит, но не для StringGtid

Еще раз к этому фрагменту:

if ActiveControl is TWrapGrid then begin
with TcustomEdit(ActiveControl) do


Он просто меня очень беспокоит...
Вдумайтесь наконец, что вы тут делаете: проверяете: активный контрол есть TWrapGrid? если да, то преобразуете ссылку на него к TcustomEdit (кошмар! почему?? это даже не его предок)
Ну компилятор он парень простой: сказано - сделано. И что из того выходит, как вы думаете? Лично мне даже представить страшно...
Я не читал книжки Озерова, но что-то мне очень сомнительно что там есть подобные примеры.

А по поводу помочь... Видите ли, тут придется не помогать, а делать за вас. Так что звиняйте.


 
ida   (2004-07-05 12:08) [14]


> преобразуете ссылку на него к TcustomEdit (кошмар! почему??
> это даже не его предок)

ну не ругайся. Кто предок StringGrid"а? можно ли его поставить вместо TCustomEdit?


 
KSergey ©   (2004-07-06 09:16) [15]

> [14] ida   (05.07.04 12:08)
> ну не ругайся. Кто предок StringGrid"а? можно ли его поставить
> вместо TCustomEdit?

Можно
Только зачем, я никак не пойму? До какого свойства WrapGrid"а выходите добраться?


 
GanibalLector ©   (2004-07-06 10:59) [16]

А че Вы спорите???А ж дал рабочий исходник[2].Вы пробовали???

З.Ы. Фреймы поубирайте и юзайте.



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

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

Наверх




Память: 0.52 MB
Время: 0.024 c
14-1088270241
Nelud
2004-06-26 21:17
2004.07.18
Собеседование.


8-1083186234
Zeon
2004-04-29 01:03
2004.07.18
Запись звука


14-1088403388
31512
2004-06-28 10:16
2004.07.18
ГАИшники наши и буржуинские


14-1088168177
DeadMeat
2004-06-25 16:56
2004.07.18
Загадка


14-1088657607
Vlad Oshin
2004-07-01 08:53
2004.07.18
длинные повторяющиеся сигналы в Award Biose v6?