Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1233818505
Slider007
2009-02-05 10:21
2009.04.05
С днем рождения ! 31 января 2009 суббота


1-1209384948
GreyWolf
2008-04-28 16:15
2009.04.05
Отладка такой ситуации


2-1234350097
workbench
2009-02-11 14:01
2009.04.05
перемещение TreeNode


2-1234390531
Man_Bear
2009-02-12 01:15
2009.04.05
Отображение данных


2-1234971867
ford
2009-02-18 18:44
2009.04.05
TlistView Has no parent control





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский