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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2008, 18:11   #11
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А когда она должна взять эти данные? Когда в эдите будет нажат энтер? Или она все время должна отслеживать изменения в эдите? Если так - сделайте "взять данные" по таймеру или по событию изменения содержимого эдита...
именно по таймеру... каждые n секунд должно проверяться содержимое Edit-а. С такой проблемой я даже не сталкивался... вот и ищу... только пока толку мало
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 19:21   #12
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
С такой проблемой я даже не сталкивался... вот и ищу... только пока толку мало
А в чем проблема-то? Я лично "никакой проблемы на горизонте не наблюдаю"
Все функции, которые вам нужно использовать, вам привели...
Попробую резюмировать. Итак, ваша вторая программа:
1. По событию таймера ищет вашу первую.
2. Определив ее хэндл, ищет среди ее дочерних окон нужный эдит (его хэндл).
3. Берет из него текст и дальше делает то, что вы там задумали, вплоть до обратной пересылки текста в первую программу. Только для этого случая единственное, что нужно сделать в первой программе - предусмотреть обработку стандартного виндового сообщения...

Все эти вопросы (раздельно или в совокупности) неоднократно рассматривались на форуме, поэтому прежде чем паниковать и впадать в уныние, равно как и торопиться поскорее задать следующий вопрос, потрудитесь почитать другие темы форума и поискать нужное вам...
mihali4 вне форума Ответить с цитированием
Старый 19.04.2008, 19:45   #13
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Все эти вопросы (раздельно или в совокупности) неоднократно рассматривались на форуме, поэтому прежде чем паниковать и впадать в уныние, равно как и торопиться поскорее задать следующий вопрос, потрудитесь почитать другие темы форума и поискать нужное вам...
впадание в уныние, а тем более паники за мной не наблюдается я смотрел темы форума... то, что я нашел - это поиск Edit-а по содержимому... а мне хотелось бы по имени ибо содержимое этого самого Edit-а может неоднократно меняться. Тем более, у меня несколько Edit-ов и как минимум в двух из них текст будет одинаковым
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 19:57   #14
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
поиск Edit-а по содержимому... а мне хотелось бы по имени
Вы хотя бы ознакомились с функциями FindWindow и FindWindowEx ?
Похоже, что и не пытались... К сожалению...
Поймите, никто не собирается бросать все свои дела и делать вам программу...
mihali4 вне форума Ответить с цитированием
Старый 19.04.2008, 20:51   #15
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Вы хотя бы ознакомились с функциями FindWindow и FindWindowEx ?
Похоже, что и не пытались... К сожалению...
Поймите, никто не собирается бросать все свои дела и делать вам программу...
Я не прошу, чтобы делали за меня. Естественно я сам пытаюсь разобраться в этом вопросе. Вот до чего дошел:
Код:
uses
  SysUtils, Classes, Windows;
var
  h, h1: HWND;
  s : array[1..255] of char;
begin
  h := FindWindow(nil, 'Ýòî ïðîáíàÿ ôîðìà');
  writeln('h = ', h);
  h1 := FindWindowEx(h, 0, 'TEdit', nil);
  writeln(h1);
  writeln(GetWindowText(h1, @s, 255));
  writeln(s);
  readln;
end.
На форме 2-го приложения 2 Edit-a.
Проблема в том, что в s записывается текст 2-го Edit-а, причем если этот текст меняется, то в s записывается старый текст
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 21:25   #16
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

1-ое приложение.
Код:
unit Unit1;

interface

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

type
  TMyForm = class(TForm)
    Edit1: TEdit;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    cColon : char;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MyForm: TMyForm;

implementation

{$R *.dfm}

procedure TMyForm.Timer1Timer(Sender: TObject);
var
    hr, mn, sec, msec : word;
begin
    DecodeTime(Now, hr, mn, sec, msec);
    if cColon <> ':' then cColon := ':' else cColon := ' ';
    self.Edit1.Text := format('%2.2d %s %2.2d %s %2.2d',
                                    [hr, cColon, mn, cColon, sec]);
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
    cColon := ' ';
    SetWindowLong(Edit1.Handle, GWL_ID, 1024);
    Timer1.Interval := 500;
end;

end.
2-ое приложение.
Код:
unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
    hRemoteForm : HWND;
    hRemoteEdit : HWND;
    str         : string[255];
begin
    hRemoteForm := windows.FindWindowA(
                                PANSICHAR('TMyForm'),
                                PANSICHAR('MyForm'));
    hRemoteEdit := windows.GetDlgItem(hRemoteForm, 1024);
    str[0] := chr(SendMessageA(hRemoteEdit, WM_GETTEXT, 255, LPARAM(@str[1])));
    Label1.Caption := str;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    Timer1.Interval := 100;
end;

end.
B_N вне форума Ответить с цитированием
Старый 19.04.2008, 21:34   #17
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

2 B_N
спасибо! с SendMessage я уже разобрался и все работает. мне интересно, почему GetWindowText берет только начальный вариант текста
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 22:03   #18
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Потому что существует какое-то дурацкое ограничение:
Цитата:
This function cannot retrieve the text of an edit control in another application.
mihali4 вне форума Ответить с цитированием
Старый 19.04.2008, 22:06   #19
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Потому что существует какое-то дурацкое ограничение:
мда... своего компа под рукой нет... хелпа тоже, а в инете я этго не нашел... ну чтож... всем спасибо!! Теория есть... теперь дело за малым - все это реализовать тут уж я сам справлюсь
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 22:21   #20
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
своего компа под рукой нет... хелпа тоже
Это из хэлпа по GetWindowText...
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как «внедриться» в другую программу? forzub Общие вопросы Delphi 0 10.07.2008 17:33
Как записать свою программу в другую? AngelOfDeath Общие вопросы Delphi 1 12.05.2008 06:12
как можно иначе записать программу Malinka Помощь студентам 2 15.01.2008 11:08
Как записать в com -порт или модем двоичные данные sergrom Win Api 10 25.06.2007 15:15
Отправлять данные из одной таблицы в другую Таня84 БД в Delphi 14 28.04.2007 23:23