Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Ответить
Настройки темы
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
// Показываем результат
lbOutput.Caption := Trim(edInput1.Text)+' '+cbSign.Items[cbSign.ItemIndex]+' '+
Trim(edInput2.Text)+' = ' ;
...для меня остаётся непонятным,по какому принципу выставляются знаки апострофа и плюса('+)в данном примере.
Не мог бы кто-нибудь разъяснить это дело?

P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 17:41, 19-11-2004

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip SubRip_Mod_files.zip
(3.9 Kb, 4 просмотров)

Savant
Спасибо,попробую это теперь осмыслить и как-нибудь применить .

...код переварил,и то,что вышло,прикрепил в файле .
Вроде работает,но всё равно так и не смог придумать нормальную схему условных операторов в обработчике события OnCloseQuery,поэтому пришлось идти немного обходным путём.
Дело в том,что мне необходимо в этом обработчике проверить не только наличие изменений в открытом документе,но и то,сохранил ли пользователь уже этот документ или нет.И с последним пунктом у меня как раз и возникает загвоздка.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Последний раз редактировалось DillerInc, 07-02-2005 в 22:46.


Отправлено: 18:52, 07-02-2005 | #41



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


В общем,как можно догадаться - у меня снова вопросы...
...а именно,необходимо получить ссылку на какое-нибудь окно - то бишь т.н. Handle Window (HWND).И не просто получить,а вывести её как-то в виде символов,к примеру,в компоненте TLabel(метка).
Значит в чём заключается вопрос...имеется функция WinAPI :
function FindWindow(lpClassName, lpWindowName : PChar) : HWND;
...возвращающая "хэндл" искомого окна.А вот как теперь этому значению придать наглядный вид,чтобы отобразить символьно это значение в той же метке?
Возможно ли такое вообще,если да,то как?С помощью каких функций?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 23:44, 01-03-2005 | #42


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Сначала теория: хэндл окна представляет собой просто двойное слово, т.е. 32-битное число. Число можно представить в символьной форме функцией Int2Str. А например с помощью GetWindowText() можно получить заголовок окна. Функций работы с окнами очень много, конкретизируйте цель пожалуйста...

Отправлено: 19:09, 02-03-2005 | #43


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Цель - использование этого самого хэндла,32-битного числа,в другой программе,т.е. мне необходимо прописать в другой программе это значение как один из параметров для выполнения определённой команды.Именно поэтому мне необходимо получить символьное представление значения типа HWND.
Цитата:
Число можно представить в символьной форме функцией Int2Str
...т.е. если я правильно понял,можно сделать следующее:
Код: Выделить весь код
procedure A;
var
 h : String;
begin
 h := IntToStr(FindWindow(TForm, Form1));
end;
...не так ли?Или...
Цитата:
А например с помощью GetWindowText() можно получить заголовок окна
...а что конкретно имеется в виду под словосочетанием "заголовок окна" - данная функция,если я не ошибаюсь,возвращает значение типа Integer?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 20:08, 02-03-2005 | #44


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Цитата:
если я правильно понял,можно сделать следующее...
да, можно, но нужно ли? Повторяю еще раз HWND есть не что иное, как Cardinal (беззнаковое длинное целое), не проще ли его передавать как параметр?
Цитата:
а что конкретно имеется в виду под словосочетанием "заголовок окна"
Код: Выделить весь код
var
  S: array[0..999] of Char; // Запас всегда иметь хорошо ;)
begin
  .....
  // Записываем по адресу @S заголовок окна формы Form1
  // GetWindowText приплёл тут просто для примера,
  // можно было написать вместо него константу 1000
  GetWindowText(Form1.Handle,@S,GetWindowTextLength(Form1.Handle)+1);
  // Выводим текст в Label1
  Label1.Caption:=S;
end;
Хочу отметить также универсальность GetWindowText. Если HWND указывает на окно - возвращается заголовок окна, если на некоторый контрол, то - текстовое содержимое этого контрола (в Дельфи то же делают свойства Caption и Text).

Отправлено: 22:05, 02-03-2005 | #45


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Спасибо за информацию - будем мотать на ус .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 23:46, 02-03-2005 | #46


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Доброго всем времени суток!
Это называется - сижу, туплю...
Как можно грамотно на Delphi организовать оператор выбора case..of..end;, чтобы он был не такой примитивный как обычно его описывают,например:
Код: Выделить весь код
case Ch of
 'n', 'N', 'н', 'Н' : lbOutput.Caption := 'Нет';
 'y', 'Y', 'д', 'Д' : lbOutput.Caption := 'Да';
end;
...а такой,чтобы каждая константа выбора содержала определённый кусок кода.

Можно сделать,конечно,и так:
Код: Выделить весь код
if dEvent.dwDebugEventCode = LOAD_DLL_DEBUG_EVENT then  // Первый вариант константы выбора
begin
 hDllFile := dEvent.LoadDll.hFile;
if GetFileNameFromHandle(hDllFile) then
begin
 PPointer(Base) := dEvent.LoadDll.lpBaseOfDll;
 RestoreCode := InjectCode(EntryPoint, $FFFF);
end;
end;

if dEvent.dwDebugEventCode = EXCEPTION_DEBUG_EVENT then  // второй вариант константы выбора
if dEvent.Exception.ExceptionRecord.ExceptionCode =
                       EXCEPTION_ILLEGAL_INSTRUCTION then
begin
 RestoreData(EntryPoint, RestoreCode);
 DecryptStart := SeekBpPlace(Base);
 SendMessage(hMemo, WM_SETTEXT, 0,
       lParam(' * Тра-ля-ля '+IntToHex(DecryptStart, 8)));
end;
...хотя подобный код работает,но он всегда будет полностью проверять все варианты прежде,чем найдёт подходящий.На что будет уходить лишнее время,что "не есть гут" .
Следовательно - как быть ?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 20:26, 18-08-2005 | #47


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Не совсем понятно, как "каждая константа выбора" может содержать "определённый кусок кода" ))). Да к тому же в общем случае процессорное время будет все равно уходить (но меньше), т.к. программа будет последовательно (хотя и это зависит от компилятора, где-то могут для поиска (при большом кол-ве вариантов) использоваться другие алгоритмы) сравнивать значения, пока не найдёт подходящее.

Но если Ваша мысля дошла, то есть два (в принципе одинаковых) решения:
1) внешние операторы if преобразовать к виду
Код: Выделить весь код
if dEvent.dwDebugEventCode = LOAD_DLL_DEBUG_EVENT then begin
  < .. >
end else
if dEvent.dwDebugEventCode = EXCEPTION_DEBUG_EVENT then begin
  < .. >
end;
2) использовать case .. of .. end
Код: Выделить весь код
case dEvent.dwDebugEventCode of
  LOAD_DLL_DEBUG_EVENT:
    begin
      < .. >
    end;
  EXCEPTION_DEBUG_EVENT:
    begin
      < .. >
    end;
end;
Справка: конструкция begin .. end; (блок) являет собой один оператор, вне зависимости от того, сколько операторов в ней находится и находится ли вообще хоть один.

Отправлено: 20:56, 18-08-2005 | #48


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Спасибо за разъяснения насчёт case .. of .. end .
Сейчас вот подумал,потом глянул это дело в отладчике - действительно оба решения в принципе одинаковы .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 22:15, 18-08-2005 | #49


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Вот ещё один вопрос возник:
в Delphi есть объект класса TMemo. У его свойтсва Lines имеются методы Add и Append.
Так вот как можно с помощью WinAPI организовать процедуру,аналогичную дельфийскому методу Append ?
Т.к. если послать сообщение классу STATIC...
Код: Выделить весь код
 SendMessage(handleStatic, WM_SETTEXT, 0, lParam('К примеру '+IntToHex(some_stuff)));
...то это будет аналогично дельфийскому Add, т.е. текст целиком заменится на новый,а мне необходимо добавить этот текст...

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 14:10, 19-08-2005 | #50



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[флейм] GGK и уголовная ответственность за использование нелицензионного ПО SPB Лицензирование продуктов Microsoft 9 20-06-2007 12:38
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? XCodeR Программирование и базы данных 4 12-03-2007 19:51
Delphi - Win32 API | Delphi | Странности с Winapi Timer Mavlyudov Программирование и базы данных 4 14-11-2005 10:10
Delphi - Delphi, WinAPI | Корректное завершение программы fossil Программирование и базы данных 6 10-08-2005 14:52
Delphi - *Решено* | Использование WinAPI под Delphi Savant Программирование и базы данных 2 14-01-2005 21:40




 
Переход