Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
ВнизСкопировать данные с помощью API функций Найти похожие ветки
← →
Krozzz (2009-02-13 19:00) [0]Есть две программы. В каждой по компоненту Edit. Подскажите, как поместить информацию из Edit"а одной программы в Edit другой (и если вместо Edit будет Label)?
← →
Сергей М. © (2009-02-13 21:41) [1]Обе программы дельфийские ?
← →
Германн © (2009-02-14 00:28) [2]
> Скопировать данные с помощью API функций
Это не на форумах надо спрашивать. Это надо изучать по книгам, причём достаточно серьёзным. Если речь идёт про WinAPI функции, то нужно абсолютно точно понимать, что никаких "компонент" они не знали, не знают и знать не хотят. Они знают только "окна" (windows).
P.S. А дельфийский компонент TLabel, к примеру, никакого окна не имеет.
← →
Krozzz (2009-02-14 09:05) [3]
> Обе программы дельфийские ?
Да
← →
Сергей М. © (2009-02-14 17:29) [4]И обе твоей разработки, т.е. исходники доступны ?
← →
Krozzz (2009-02-14 18:56) [5]
> И обе твоей разработки, т.е. исходники доступны ?
Программы примитивные:
в первой только компонент Edit1, во второй Edit1 и Button1.
При нажатии на Button1 данные из Edit1 1й программы должны скопироваться в Edit1 2й.
← →
Сергей М. © (2009-02-14 19:14) [6]Ответь на вопрос ..
← →
Krozzz (2009-02-14 19:15) [7]
> исходники доступны
доступны
← →
Сергей М. © (2009-02-14 20:18) [8]Тогда см., например, сообщение WM_COPYDATA
← →
Сергей М. © (2009-02-14 20:21) [9]http://www.delphisources.ru/pages/faq/base/wm_cd_link.html
← →
Krozzz (2009-02-14 21:46) [10]Спасибо. Нашел в хелпе delphi api пример как передать строку с помощью WM_COPYDATA:
приложение получатель:
...
TMyForm1 = class(TForm)
private
...
procedure ReceiveMessage (var Msg: TMessage); message WM_COPYDATA;
...
end;
...
implementation
...
procedure TMyForm.ReceiveMessage;
var
pcd : PCopyDataStruct;
begin
pcd := PCopyDataStruct(Msg.LParam);
Caption := PChar(pcd.lpData);
end;
приложение отправитель:
procedure TFormXXX.Button1Click(Sender: TObject);
var
cd : TCopyDataStruct;
begin
cd.cbData := Length(Edit1.Text)+1;
cd.lpData := PChar(Edit1.Text);
SendMessage ( FindWindow("TMyForm1", nil),
WM_COPYDATA, 0, LParam(@cd));
end;
Правда тут кнопка в программе-отправителе. Если не в тягость, как сделать
так, чтобы кнопка не посылала, а получала строку?
← →
Сергей М. © (2009-02-14 22:25) [11]Никак.
Прежде чем что-то получать, надо чтобы это "что-то" было сначала отправлено, иначе получать нечего)
← →
Krozzz (2009-02-14 22:33) [12]
> Никак.Прежде чем что-то получать, надо чтобы это "что-то"
> было сначала отправлено, иначе получать нечего)
Т.е. нелзя сделать так, чтобы кнопка находила строку в другой программе, посылал ее в свою программу и потом сама получала?
← →
Krozzz (2009-02-14 22:36) [13]
> потом сама получала?
Точнее получала программа, в которо кнопка, и размещала в каком-нибудь, скажем, Label или Edit?
← →
Denis__ © (2009-02-14 22:53) [14]Пусть посылает сообщение, приняв которое та, другая программа отправляет строку...
← →
Сергей М. © (2009-02-14 23:02) [15]
> Krozzz
Можно лишь в частных случаях
← →
Krozzz (2009-02-14 23:15) [16]
> Можно лишь в частных случаях
Какими должны быть условия?
← →
Krozzz (2009-02-14 23:21) [17]Извиняюсь, забыл сказать, что программу, из которой копируется строка, тестовая, т.е. на практике надо будет считать строку из программы, в которой будет много элементов (естественно и тот, с которого надо считать) и добавить или убавить элементы к ней нельзя.
← →
Сергей М. © (2009-02-14 23:26) [18]Ну, как минимум, контрол-источник должен быть представлен собственным окном.
← →
Krozzz (2009-02-14 23:29) [19]
> Ну, как минимум, контрол-источник должен быть представлен
> собственным окном.
т.е. все-таки надо добавить в прогу-источник дополнительный элемент?
← →
Сергей М. © (2009-02-14 23:31) [20]Не обязательно, но возможно.
← →
Krozzz (2009-02-14 23:36) [21]
> но возможно
без него?
Если можно, то можете выложить примерный код?
← →
Германн © (2009-02-15 01:14) [22]
> Krozzz (14.02.09 19:15) [7]
>
>
> > исходники доступны
>
> доступны
>
Ой врёшь!
Всё что тобой написано после этого поста свидетельствует о совсем ином.
← →
Сергей М. © (2009-02-15 20:44) [23]"Выкладываю" - WM_GETTEXT
← →
Krozzz (2009-02-15 22:36) [24]
procedure TForm1.Button1Click(Sender: TObject);
var
wnd:hwnd;
a:string;
begin
wnd:=FindWindow("TFormN","FormN");
wnd:=FindWindowEx(wnd,0,"TLabel","Label1");
SendMessage(wnd,WM_GETTEXT,100, LParam(@a));
Edit1.Text:=a;
end;
Все равно не копирует(
← →
Германн © (2009-02-16 00:23) [25]
> Все равно не копирует(
> P.S. А дельфийский компонент TLabel, к примеру, никакого
> окна не имеет.
>
← →
Юрий Зотов © (2009-02-16 11:58) [26]> Krozzz (15.02.09 22:36) [24]
> wnd:=FindWindowEx(wnd,0,"TLabel","Label1");
Как можно найти окно TLabel, если никакого окна у TLabel нет совсем?
Причем TLabel - это далеко не единственный компонент без окна.
Универсальная схема может быть такой:
- регистрируем 2 собственных сообщения - запрос и ответ;
- при нажатии на кнопку вторая программа посылает первой запрос, в параметрах которого указывает, что она хочет получить;
- в ответ первая программа посылает второй результат запроса.
← →
clickmaker © (2009-02-16 12:46) [27]> wnd:=FindWindowEx(wnd,0,"TLabel","Label1");
> SendMessage(wnd,WM_GETTEXT,100, LParam(@a));
во-первых, TLabel никогда не найдешь
во-вторых, не выделена память под a
← →
Krozzz (2009-02-16 20:09) [28]
> - в ответ первая программа посылает второй результат запроса.
первую программу изменять нельзя.
← →
Сергей М. © (2009-02-16 20:11) [29]
> первую программу изменять нельзя
Ну тогда распрощайся с затеей.
← →
Krozzz (2009-02-16 20:35) [30]
> Ну тогда распрощайся с затеей.
Обидно ;(
Ну ладно...
Закрывайте тему
← →
@!!ex © (2009-02-16 22:03) [31]http://delphimaster.net/view/9-1234355258/
← →
Германн © (2009-02-17 00:30) [32]
> Krozzz (16.02.09 20:35) [30]
>
>
> > Ну тогда распрощайся с затеей.
>
> Обидно ;(
> Ну ладно...
> Закрывайте тему
Об этом я тебе уже говорил в том первом твоём вопросе, который был закрыт.
Но зачем было врать? "Krozzz (14.02.09 19:15) [7]"
Ну и напоследок.
[2] я постил не просто от нечего делать.
← →
Германн © (2009-02-17 00:39) [33]Да и ещё насчёт вранья.
Учитывая, что сразу несколько уважаемых мастеров проявили необъяснимую для меня благосклонность к твоему вопросу, весьма возможно, что твоё враньё привело к тому, что решение так и не было найдено.
Примите и прочь.
← →
korneley © (2009-02-17 01:02) [34]
> Германн © (17.02.09 00:39) [33]
> ...весьма возможно, что твоё враньё привело
> к тому, что решение так и не было найдено.
Дык, в общем случае, и нет такого... Сказал бы автор сразу: "Хочу из Эдитов разных, вместо звёздочек, буковки паролей реальные получать" :) Итог, думаю, был бы тем же. Но быстрее :)))
← →
Германн © (2009-02-17 01:12) [35]
> korneley © (17.02.09 01:02) [34]
>
>
> > Германн © (17.02.09 00:39) [33]
> > ...весьма возможно, что твоё враньё привело
> > к тому, что решение так и не было найдено.
>
> Дык, в общем случае, и нет такого... Сказал бы автор сразу:
> "Хочу из Эдитов разных, вместо звёздочек, буковки паролей
> реальные получать" :) Итог, думаю, был бы тем же. Но быстрее
> :)))
>
Нет. Я о том, что автор свой единственный приведённый пример посвятил TLabel. Но если он очевидно соврал, когда говорил, что исходники доступны, то мог соврать и о том, что "Обе программы дельфийские".
← →
korneley © (2009-02-17 01:27) [36]
> Krozzz (14.02.09 23:21) [17]
> Извиняюсь, забыл сказать, что программу, из которой копируется
> строка, тестовая, т.е. на практике надо будет считать строку
> из программы, в которой будет много элементов (естественно
> и тот, с которого надо считать) и добавить или убавить элементы
> к ней нельзя.
Это многое объясняет.
← →
Германн © (2009-02-17 01:31) [37]
> korneley © (17.02.09 01:27) [36]
>
>
> > Krozzz (14.02.09 23:21) [17]
> > Извиняюсь, забыл сказать, что программу, из которой копируется
> > строка, тестовая, т.е. на практике надо будет считать
> строку
> > из программы, в которой будет много элементов (естественно
> > и тот, с которого надо считать) и добавить или убавить
> элементы
> > к ней нельзя.
>
> Это многое объясняет.
Это только запутывает.
Примите и прочь.
← →
Krozzz (2009-02-17 16:17) [38]Решил проблему спомощью GetWindowText().
Извиняюсь, если был некорректен в вопросах.
Всем, кто помогал - спасибо!
(кроме, разве что, Германн"а.
Вы, кроме как критиковать ничего не умеете?..
Я не врал, я вначале проверял на тестовой программе. Просто потом появилось желание проверить на сторонней программе).
← →
Юрий Зотов © (2009-02-17 20:08) [39]> Krozzz (17.02.09 16:17) [38]
> Решил проблему с помощью GetWindowText().
Есть серьезные сомнения, что таким образом Вы ее действительно решили. Без шуток. Не знаю всех условий Вашей реальной задачи, но в общем случае GetWindowText проблему, обозначенную в сабже, не решает. Поэтому, не исключено, что Вам только кажется, что Вы ее и в самом деле решили - из-за недостаточного объема тестирования.
← →
Krozzz (2009-02-17 20:41) [40]
> Есть серьезные сомнения, что таким образом Вы ее действительно
> решили. Без шуток. Не знаю всех условий Вашей реальной задачи,
> но в общем случае GetWindowText проблему, обозначенную
> в сабже, не решает. Поэтому, не исключено, что Вам только
> кажется, что Вы ее и в самом деле решили - из-за недостаточного
> объема тестирования.<Цитата>
>
>
>
В общем случае не решает, но мне достаточно один раз скопировать содержимое Edit и на этом остановиться (хотя при изменении содержимого того Edit"а в запущенной программе, данной функции уже не хватает).
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.007 c