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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2015, 13:09   #1
Lamer2015
Новичок
Джуниор
 
Регистрация: 27.01.2015
Сообщений: 5
По умолчанию Помогите!!! Turbo Delphi

Сдаю зачет, нужно ответить лабораторную работу.
Она уменьшает кнопки калькулятора в 2 раза.
Препод просит объяснить каждую строку, я вообще не шарю.
С меня тонны нефти!

Вот код программы:
Код:
program Project6;


uses
  Windows;

//Messages;

var
  lsi: TStartupInfo;
  lpi: TProcessInformation;
  h: HWND;
  t : tagWINDOWINFO;

  x, y : Integer;
  r : TRect;

function change(wnd: HWND; int : LParam): boolean; stdcall;
begin
  GetWindowinfo(wnd, t);
  MoveWindow(wnd, t.rcWindow.left - x - r.Left,
                  t.rcWindow.top - y - r.Top ,
                  (t.rcWindow.Right-t.rcWindow.Left) div  2,
                  (t.rcWindow.Bottom-t.rcWindow.Top ) div 2 , true);
  result := true;
end;

begin

  CreateProcess('C:\WINDOWS\system32\calc.exe',
                nil,
                nil,
                nil,
                false,
                0,
                nil,
                nil,
                lsi,
                lpi);
                     
  sleep(400);

  h := FindWindow('SciCalc','Калькулятор');

  GetWindowinfo(h, t);
  x := t.rcWindow.Left;
  Y := t.rcWindow.top;

  GetClientRect(h, r);

  EnumChildWindows(h,@change,0);


end.

Последний раз редактировалось Stilet; 27.01.2015 в 13:33.
Lamer2015 вне форума Ответить с цитированием
Старый 27.01.2015, 13:39   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

А спросить у того кто писал, не вариант?
lomastr_ вне форума Ответить с цитированием
Старый 27.01.2015, 13:41   #3
Lamer2015
Новичок
Джуниор
 
Регистрация: 27.01.2015
Сообщений: 5
По умолчанию

пятый курс писал, программы достались по наследству.
помогите кто чем сможет)
Lamer2015 вне форума Ответить с цитированием
Старый 27.01.2015, 13:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
program Project6; название программы


uses подключим модули
  Windows; Винды

//Messages;

var опишем переменные
  lsi: TStartupInfo; для старта процесса
  lpi: TProcessInformation; и информации о стартующем проце
  h: HWND; а так же для хендла окна процесса
  t : tagWINDOWINFO; и информации о окне процесса

  x, y : Integer; Это видимо координаты
  r : TRect; Это переменка для размеров окна видимо

Обьявление функции колбэка для обработки перечисляемых окон
function change(wnd: HWND; int : LParam): boolean; stdcall;
begin
  GetWindowinfo(wnd, t); получение онформации о окне по хендлу что передается

  и перемещение самого окна относительно х и у
  MoveWindow(wnd, t.rcWindow.left - x - r.Left,
                  t.rcWindow.top - y - r.Top ,
                  (t.rcWindow.Right-t.rcWindow.Left) div  2,
                  (t.rcWindow.Bottom-t.rcWindow.Top ) div 2 , true);
  result := true;
end;

begin
 Стартуем процесс калькулятора
  CreateProcess('C:\WINDOWS\system32\calc.exe',
                nil,
                nil,
                nil,
                false,
                0,
                nil,
                nil,
                lsi,
                lpi);
   ждем пока он загрузится (чухня, так делать не стоит)                  
  sleep(400);

 ищем окно калькулятора среди списка окон
  h := FindWindow('SciCalc','Калькулятор');

Получаем о нем информацию в том числе и координаты окна
  GetWindowinfo(h, t);
  x := t.rcWindow.Left;
  Y := t.rcWindow.top;

А так же клиентскую область (читай: размеры)
  GetClientRect(h, r);

Для чего то начинаем перечисление окон внути этого окна. Видимо тут идет что-то
типа поиска компонентов калькулятора, которые будут менять свою позицию в
функции change() описанной выше.
  EnumChildWindows(h,@change,0);


end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 13:49   #5
Lamer2015
Новичок
Джуниор
 
Регистрация: 27.01.2015
Сообщений: 5
По умолчанию

спасибо большущее! мира и добра тебе, здоровья твоей семье и детям! я твой фанат!
Lamer2015 вне форума Ответить с цитированием
Старый 27.01.2015, 13:53   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и детям!
Нэмае...
Цитата:
я твой фанат!
Я неблагодарный кумир )
Почти Сид Вишис )))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2015, 14:00   #7
Lamer2015
Новичок
Джуниор
 
Регистрация: 27.01.2015
Сообщений: 5
По умолчанию

только, что зачет поставил) еще раз пасиба!
Lamer2015 вне форума Ответить с цитированием
Старый 27.01.2015, 14:14   #8
Lamer2015
Новичок
Джуниор
 
Регистрация: 27.01.2015
Сообщений: 5
По умолчанию

чуваки, еще один вопросец.
прикладываю к посту скрин проги и часть кода.
интересует выделенная строка, что означает и вообще зачем нужна?

p.s. прога шевелит фигурки во все стороны.

заранее спасибо. если тема мешает, потом удалю
Изображения
Тип файла: jpg 123д.jpg (107.0 Кб, 125 просмотров)
Lamer2015 вне форума Ответить с цитированием
Старый 27.01.2015, 14:48   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
потом удалю
Не сможешь )
Цитата:
что означает и вообще зачем нужна?
Дословно так: Взять из wParam последние 4 байта. Чесслово я бы не так делал, ну да ладно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сделать задачу через Turbo Delphi Alibastr007 БД в Delphi 0 05.03.2009 15:33
помогите с turbo delphi rutkov Софт 2 23.05.2008 11:56