Текущий архив: 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.5 MB
Время: 0.023 c