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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2010, 15:35   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Отправка/обработка/получение значений из программы в программу

Добрый вечер! Пытаюсь сделать одну лабу. Смысл: в первой программе вводятся 2 числа, отправляются во вторую программу, там эти 2 числа суммируются, результат отправляется назад в первую программу. Во вложении две программы: Source (откуда отправляются значения) и Target (куда отправляются значения). Не получается сделать отправку во вторую программу значений так, чтобы в программе Target в поле Lable5 вставилось значение из Edit1 (из программы Source), а в Lable6 в программе Target из Edit2 (из программы Source). Процедуру сложения и отправки результата по аналогии сделаю сам. Прошу помочь с отправкой нескольких этих значений. Заранее спасибо.
Вложения
Тип файла: zip Лаба_4 (Delphi).zip (394.5 Кб, 14 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.11.2010, 16:54   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Архив не смотрел.
А может, попробовать механизм WM_COPYDATA ?
mihali4 вне форума Ответить с цитированием
Старый 18.11.2010, 17:05   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Не знаю такого). Можно пример как он работает?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.11.2010, 17:13   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да их на форуме полно.
Я сейчас вбил в поиск "WM_COPYDATA" - там есть прямые ответы по теме.
mihali4 вне форума Ответить с цитированием
Старый 18.11.2010, 17:43   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

mihali4, вот, нашел тему, в которой Вы давали пример. Сделал его под себя, но значение из поля Edit1 из программы Source не отображается в программе Target в Label5.
Код в программе отправителе:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 cd: TCopyDataStruct;
begin
 cd.cbData:=Length(Form1.Edit1.Text);
 cd.lpData:=PChar(Form1.Edit1.Text);
 SendMessage(FindWindow('Target',nil),WM_COPYDATA,0,LParam(@cd));
end;
Код в программе получения:
Код:
procedure TForm1.ReceiveMessage;
var
 pcd: PCopyDataStruct;
begin
 pcd:=PCopyDataStruct(Msg.LParam);
 Form1.Label5.Caption:=PChar(pcd.lpData);
end;
Чего я не так пишу?
ссылка на тему
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.11.2010, 18:17   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да вроде все правильно...
Вот, набросал, все работает :
Broadcasting.rar
mihali4 вне форума Ответить с цитированием
Старый 18.11.2010, 19:50   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Смущение

Не получается сразу два числа отправить . Уже все перепробовал. Отправляет только второе число если ввести два. Что еще там можно придумать?
Вложения
Тип файла: zip Broadcasting.zip (394.9 Кб, 10 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.11.2010, 20:23   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Все получится
Пройдите отправку (TForm1.Button1Click) по шагам и увидите, что оба числа передаются. Я добавил между двумя отправками Application.ProcessMessages; - на всякий случай.
Но вот заносятся они в одну и ту же FormReceive.Label1...
Попробуйте поставить глобальный счетчик принятых сообщений и в зависимости от номера принятого сообщения заносите либо в FormReceive.Label1, либо в FormReceive.Label2.
mihali4 вне форума Ответить с цитированием
Старый 18.11.2010, 20:30   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Эх, да не успею я уже исправить, 2 часа ночи на дворе . Хотел успеть до завтра к зачету доделать четвертую лабу, чтобы получить его. 3 есть, а четвертой не хватает, вот и мучуюсь, а времени нету уже. ПРидется завтра хотя бы первые 3 сдавать
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.11.2010, 20:37   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Прошу помочь с отправкой нескольких этих значений.
Сокетами не подойдет?
Если нет - зарезервируй два сообщения WM_USER и отправляй через них:
Первая
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  WM_ONE=WM_USER+1;
  WM_TWO=WM_USER+2;
  WM_RES=WM_USER+3;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
        procedure WMRES(var m:TMessage);message WM_RES;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var h:HWND;
begin
 h:=FindWindow('TForm2','Form2');
 PostMessage(h,wm_One,StrToIntDef(Edit1.Text,0),0);
 PostMessage(h,WM_TWO,StrToIntDef(Edit2.Text,0),0);
end;

procedure TForm1.WMRES(var m: TMessage);
begin
 Caption:=IntToStr(m.WParam);
end;

end.
Вторая
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
const
  WM_ONE=WM_USER+1;
  WM_TWO=WM_USER+2;
  WM_RES=WM_USER+3;
type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WMONE(var m:TMessage);message wm_one;
    procedure WMTWO(var m:TMessage);message wm_TWO;
    Procedure res;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.res;
var h:HWND;
begin
 h:=FindWindow('TForm1','Form1');
 PostMessage(h,WM_RES,StrToIntDef(Label1.Caption,0)+StrToIntDef(Label2.Caption,0),0);
end;

procedure TForm2.WMONE(var m: TMessage);
begin
 Label1.Caption:=IntToStr(m.WParam);
end;

procedure TForm2.WMTWO(var m: TMessage);
begin
 Label2.Caption:=IntToStr(m.WParam);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  res;
end;

end.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка\получение смс через шлюз ОПСОСа Winter_Silence Общие вопросы .NET 1 20.09.2010 21:11
отправка и получение данных с\на усб порт fize Помощь студентам 8 06.01.2010 12:18
получение значений из input TaTT DoGG PHP 14 04.01.2010 22:53
Получение значений форм Winlook JavaScript, Ajax 1 14.11.2009 20:13
Получение/Отправка данных в интернет sklazer Работа с сетью в Delphi 13 11.01.2009 16:26