Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Как копировать в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.041 c
1-1088142740
igorol
2004-06-25 09:52
2004.07.18
Недоступны ярлыки печати в QReport


3-1087578513
GanibalLector
2004-06-18 21:08
2004.07.18
IBExpert


3-1087803470
Jann
2004-06-21 11:37
2004.07.18
Индексные файлы


3-1087809102
half_litre
2004-06-21 13:11
2004.07.18
Ms Sql + begin transaction


1-1088771787
snake1977
2004-07-02 16:36
2004.07.18
Путь к сетевому принтеру





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский