Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2014, 23:30   #1
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
По умолчанию перетаскивание информации из StringGrid1 в StringGrid2 Delphi 7

привет всем активным участникам форума. помогите, пожалуйста, написать программу на Delphi 7.

делаю перетаскивание информации с помощью мыши. проще всего делать перетаскивание из тех компонентов, для которых однозначно ясно, что именно перетаскивать. для этого устанавливаем у источника DragMode=dmAutomatic, а у приемника пишем оброботчики событий OnDragOver - разрешение на прием, OnDragDrop - действия, производимые при окончании перетаскивания.

перетаскивать нужно из StringGrid1 в StringGrid2.
вот код:
Код:
procedure TForm109.StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
 accept:=Source =StringGrid1;
end;
 
procedure TForm109.StringGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
var acol,arow:integer;
begin
stringgrid2.MouseToCell(x,y,acol,arow);
stringgrid2.cells[acol,arow]:=edit1.Text;
end;
и ещё напишите, пожалуйста, как сделать заполнение StringGrid1 только цифрами?

всем спасибо за внимание и помощь!
carrie bradshaw вне форума Ответить с цитированием
Старый 24.03.2014, 10:00   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
как сделать заполнение StringGrid1 только цифрами?
Нужно отслеживать данные при вводе. Для этого можно либо использовать Val, либо отлавливать исключения для StrToInt, StrToFloat и прочих функций перевода из строки в число. Вариант 2 - отслеживать нажатия клавиш и просто не давать вбивать все что отличается от числа.

Касательно первого вопроса - Вы переносите полностью таблицу или только ячейку? Тут нужно подумать - фактически нужно отловить момент перетаскивания. Дальше перекопировать ячейку/таблицу можно с помощью простеньких процедур.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 24.03.2014 в 14:29.
Utkin вне форума Ответить с цитированием
Старый 24.03.2014, 14:56   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

DragMode=dmManual у обоих гридов.
Код:
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var xCol,xRow: Integer;
begin
  StringGrid1.MouseToCell(X,Y,xCol,xRow);
  if (xCol>=StringGrid1.FixedCols) and (xRow>=StringGrid1.FixedRows) then StringGrid1.BeginDrag(False);
end;

procedure TForm1.StringGrid2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var xCol,xRow: Integer;
begin
  Accept:=(Source=StringGrid1) and (StringGrid1.Col>=StringGrid1.FixedCols) and (StringGrid1.Row>=StringGrid1.FixedRows);
  if Accept then begin
    StringGrid2.MouseToCell(x,y,xCol,xRow);
    Accept:=(xCol>=StringGrid2.FixedCols) and (xRow>=StringGrid2.FixedRows);
  end;
end;

procedure TForm1.StringGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
var xCol,xRow: Integer;
begin
  if Source=StringGrid1 then begin
    StringGrid2.MouseToCell(x,y,xCol,xRow);
    StringGrid2.Cells[xCol,xRow]:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать данные с одного StringGrid1 в другой StringGrid2 Екатерина_21 C++ Builder 2 09.10.2011 17:06
Как экспортировать StringGrid1 и StringGrid2 в Word koysara Общие вопросы Delphi 1 05.10.2010 12:18
из StringGrid1 в StringGrid2 robin39 Помощь студентам 1 27.05.2010 19:33
StringGrid1 и StringGrid2. Их связь 2Live Общие вопросы C/C++ 4 03.09.2009 20:10
не StringGrid1.Cells[1,1]:='Delphi'; а вот так SG1.C[1,1]:='Delphi' Nemesisking Компоненты Delphi 7 08.09.2007 03:27