Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Контроль приложения


Автор: Ragnarek 4.12.2010, 10:15
Не знаю правильно ли назвал...но суть вот в чем:
Есть программа для кассира...примитивная до идиотизма...поле для ввода счета, суммы, кнопки положить и снять. Но! отсутствует возможность посмотреть отчет по проведенным операциям на счете. Достучаться до начальника консерватора невозможно...он считает что раз так работают везде...то так и должно быть. А кассиры на бумажке записывают каждую операцию, причем бывает что забывают, а потом получают по шапке за это)
Вопрос: 
Каким образом перехватить значения полей при нажатии кнопок? Ну и сохранить их в файл
Как узнать была ли нажата кнопка в окне?
--------------------------------------------------------------
Так...я понял что без хуков мне не обойтись. Значит мне нужно поставить хук на мышь? И как определить кнопку на которую кликнули?
--------------------------------------------------------------
Говорю походу сам собой. Хук запилил на мышь, а вот как клавишу определить скажите мне?

Автор: Xenag 5.12.2010, 00:01
Мне кажется лучше переписать программу заново.

Вариант 2: Если программа работает с кассовым аппаратом, то можно спросить данные у него...

Людям доверять нельзя - они косячат.

Автор: Ragnarek 5.12.2010, 01:01
Там нет кассового аппарата...там просто программка...которая подключается к базе данных и вносит или снимает деньги со счетов. Функциональность ограничена дабы не забивать кассирам голову лишними проблемами, но может если в другом месте никто не забивает себе голову, то у нас наоборот. А начальник считает что на бумажке записать это плевое дело...и что вообще проблем никаких. Да и вообще он боится чего то менять. Поэтому заставить его попросить переписать программу нереально. 

Автор: Keeper89 5.12.2010, 15:24
Алгоритм действий таков:
1) Ставим хук на кнопки
2) При нажатии ищем поле с суммой
3) Берем значение и записываем в список (в зависимости от кнопки с плюсом или минусом)

Автор: Snowy 6.12.2010, 13:11
А почему бы просто не спросить у базы, раз все операции туда заносятся...

Автор: Ragnarek 7.12.2010, 07:40
Мне кажется что проще будет написать еще одну программу которая будет вести отчет...и через нее все действия делать. На какую кнопку нажали я так и не нашел где узнать. Никто с таким не сталкивался) а как узнать что за база и как к ней подключиться? спросить у ее создателей) а они вряд ли мне скажут)

Автор: Ragnarek 7.12.2010, 10:54
Код

  begin
    app := GetForegroundWindow();
    d:=FindWindowEx(app,0,'TButton','Снять');
    if d <> 0 then
    begin

Реализовал вот так. Идем дальше. У меня на форме два поля с классом TEdit...значения у них разные. И все время меняются. Как мне узнать каждое из них?
----------------
Неправильно я реализовал =( условие выполняется независимо от нажатия кнопки =( помогите кто нибудь...и вообще мне кажется нужно перенести тему в общие вопросы хотя бы)
------------------------
Все...тупик =)
Код

if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
    begin
    app:=GetForegroundWindow();
    d:=FindWindowEx(app,0,nil,'Внести');
    getcursorpos(cursor);
    hand:=WindowFromPoint(cursor);
    if d=0 then d:=777;
    if hand=0 then hand:=666;

    if d=hand then

     begin
      d1:=getwindow(app,GW_CHILD);
      sendmessage(d1, WM_SETTEXT, 0, longword(pchar('ываываыва')));
      d2:=getwindow(app,GW_HWNDNEXT);
      sendmessage(d2, WM_SETTEXT, 0, longword(pchar('фывафыафыа')));
      d3:=getwindow(app,GW_HWNDFirst);
      sendmessage(d3, WM_SETTEXT, 0, longword(pchar('aaaaaaaaa')));
      d4:=getwindow(app,GW_HWNDNEXT);

При таком вот методе поиска находится только один элемент в котором изменяется кэпшн...остальные остаются такими же =(

Автор: Ragnarek 7.12.2010, 17:41
Оказалось что нужные мне поля TsEdit находятся на Tpanel, как в таком случае надо искать?
Код

d4:=FindWindowEx(app,0,'TsPanel',nil);
d2:=FindWindowEx(d4,0,nil,'1248');

д2 не возвращает в данном случае ничего.
###...оказалось что у меня 2 панели =( что делать я уже ума не приложу...он находит первую панель но это видимо не та...а как найти вторую?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)