Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim

Цитата:
А может просто не знаем,что искать?

Ну так ткните носом, что вам, трудно?

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 16:09 29-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Мы у вас не работаем, не знаем, что вам надо.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 16:27 29-07-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хм, переформулирую. Мне необходимо отключить, скажем, оптимизацию для всех (или некоторых) проектов в группе с наименьшими затратами. Буду благодарен за любой совет.

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 17:00 29-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ок. В свое время я использовал связку msbuild+bat файл+самописная утилита.
батник запускал утилиту, с помощью которой я устанавливал необходимые параметры (она ещё читала код с hasp ключа, записывала данные о нем в базу). потом генерировала/правила конфиги для проектов. Дальше запускала msbuild, потом утилиту для накладывание пакета hasp, потом этов инсталлятор заворачивалось, дальше iso и в конце концов писалось на диск.
То есть, мне надо было лишь вставить хасп ключ и поставить болванку в привод. всё остальное будет сделано автоматом. Делало за минут 5.
Я там не работаю, а люди до сих пор пользуются
 
А проект  в делфи всегда запускался в отладочном режиме, так что я там ничего не трогал.
 
P.S. для тех, кто прочитает и начнёт критиковать вышенаписанное. Моя программа использовалась в специфических условиях, для каждого заказчика могла быть собрана своя версия. Если надо было обновить программу, то либо приходили ко мне с своим хасп ключём, либо сообщали специальный код, и в ответ получали готовый диск, который был заточен под них. Вставил, он сам всё обновил. Людям доверять нельзя было.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:35 29-07-2008
Ramazan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Спасибо, но механизм генерации релизов у нас тоже отработан, хотелось бы упростить процесс именно отладки.

----------
Per rectum ad...

Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 22:30 29-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые, две страницы назад задавал вопрос касательно изменения свойств компонентов чужой программы...
Мне дали ссылки на инфо по данному вопросу. Почитал. Кое что понял и реализовал. Но остались некоторые вопросы...
 
В чужой программе есть компонент TPageControl с одной видимой закладкой (я знаю, что фактически их должно быть 5, разработчик просто их скрыл), необходимо их сделать доступными.
Что делаю:
Получаю хендл компонента (дочернего окна нужного приложения), определяю, что его тип TPageControl читаю его TTabSheet (дочерние окна), в результате получаю 5 хендлов с типом TPageControl. С помощью SendMessage могу менять свойство Visible у TPageControl-ов. В принципе все, что хотел сделал, но переключение между закладками могу производить только программно из своей программы, что не очень удобно.
 
Я ни как не могу сделать видимыми TabVisible этих закладок, чтобы они появились в чужой программе для более удобного использования .
Подскажите пожалуйста как это можно реализовать???

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 23:27 29-07-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap
Боюсь, что никак нормально этого не сделать.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:37 30-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Я предполагаю, что это можно сделать при помощи сообщения TCM_SETITEM окну TTabSheet, но как именно не понимаю...(
Синтаксис согласно MSDN следующий:
Цитата:
 
  lResult = SendMessage(         // returns LRESULT in lResult
    (HWND) hWndControl,         // handle to destination control
    (UINT) TCM_SETITEM,         // message ID
    (WPARAM) wParam,         // = (WPARAM) (int) iItem;
    (LPARAM) lParam         // = (LPARAM) (LPTCITEM) pitem;
  );     
Parameters
    iItem -  Index of the item.  
    pitem - Pointer to a TCITEM structure that contains the new item attributes. The mask member specifies which attributes to set. If the mask member specifies the TCIF_TEXT value, the pszText member is the address of a null-terminated string and the cchTextMax member is ignored.
 

Не понимаю, что указывать в качестве WPARAM и LPARAM параметров...

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 12:46 30-07-2008 | Исправлено: SZap, 13:43 30-07-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap
Вряд ли.
С помощью TCM_SETCURSEL можно активировать нужный таб, но PageControl проверит, является ли соответствующий TabSheet видимым. С помощью TCM_INSERTITEM можно создать новый таб, но он никак не будет связан с невидимым TabSheet, даже если индекс будет совпадать.
Единственный выход - поставить хук (Hooks - аспекты реализации). Ждем пока родителю пейджконтрола прийдет сообщение WM_NOTIFY с параметром TCN_SELCHANGE. Проверяем индекс таба с помощью TCM_GETCURSEL. Если это созданный нами с помощью TCM_INSERTITEM таб, то в обход механизмов VCL сами показываем нужный TabSheet.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 13:29 30-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Я чегото не понял??? Мне все таки кажеться, что закладки существуют, просто они скрыты, как и сами TabSheet. И если я могу делать видимыми сами TabSheet, то почему не могу делать видимыми их закладки??? Я в корне не понимаю одного, чем являются закладки по отношению к TabSheet? Или они всетаки относятся к TPageControl? Тогда чем они являються для него?
Извините за назойливость, просто очень хочеться все понять правильно....

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 14:22 30-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SZap
Я думаю, стоит попробовать сделать своё маленькое приложение с TPageControl, где попробуйте сымитировать подопытное приложение. И эксперементируйте на нём.
Вполне может быть, что  в самом приложении обрабатывается событие показа закладки и игнорирует его.
Мне встрачался код, где по таймеру их прятали, а сам таймер был настроен с интервалом 10. (человек был большой параноик).

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 14:35 30-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Буду пробовать... Других вариантов пока не вижу...
 
И еще вопрос, почему при чтении дочерних окон TPageControl т.е. TabSheet, я не всегда получаю их полный список? Даже при условии что все TabSheet в Visible (хотя это и не важно). Получаю полный список только когда предварительно перейду (активирую) на "не получаемую" закладку. Для чтения использую конструкцию:
Код:
 
 // Wnd1 - TPageControl, Wnd2 - соответственно TabSheet
  Wnd2:=GetWindow(Wnd1, GW_CHILD);
  while Wnd2<>0 do
  begin
  // чегото там...
  Wnd2:=GetWindow(Wnd2, GW_HWNDNEXT);
  end;


Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 15:41 30-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SZap
А если это не TPageControl, а например TabbedNotebook или какой нибудь другой, хитро зашифрованный? А поведение у него будет уже другое.
Вот именно по этой причине я рекомедую писать свое подопытное приложение, в котором попытаться сымитировать ситуацию.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:30 30-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Касательно того, что это TPageControl я уверен на все 100%.
Вопрос в том, что я даже не представляю в каком направлении копать с изменением свойства TabVisible с помощью API. Вот и прошу помощи у специалистов. А если это действительно не возможно, то хотелось бы понять почему...

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 19:03 30-07-2008
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap
Есть программа которая это уже делает, в смысле высвечивает все сомпоненты в список и некоторые свойства можно менять, в частности Visible.
Называется ListWindows завтра, если надо, могу выложить.

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 19:36 30-07-2008
SZap



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
Visible я и сам могу поменять, вопрос в том как поменять TabVisible...

Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 21:08 30-07-2008
HolyDiablo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не подскажете строчку(ки), чтобы поочередно добавлять в массив строчки из поля МЕМО и обратно? Пожалуйста, извините за глупый вопрос.
 
 
Добавлено:
 

Цитата:
Подскажите плиз, сам туплю что то, функцию проверки число введено или нет.

Ну например:  
 
If (edit1 = '') then
begin \\ Инструкции при невведённом числе;
         \\ Если нет, ничего соответственно;
end
else  
begin  \\ Инструкции при введённом числе;
 
end;
end;

Всего записей: 20 | Зарегистр. 30-07-2008 | Отправлено: 21:34 30-07-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SZap
Поменять TabVisible напрямую не получится.
Пейджконтрол, как и все наследники TCustomTabControl создают особое окно класса "SysTabControl32". Рисованием табов на таком окне занимается система, PageControl только управляет ими с помощью сообщений. Он ведет у себя список своих табшитов, и в зависимости от значения TabVisible добавляет, или удаляет табы из окна. Управлять этим списком снаружи никак нельзя. Можно только имитировать его работу с помощью хука.
HolyDiablo
Приблизительно так:

Код:
for i := 0 to Memo1.Lines.Count - 1 do
  StrMas[i] := Memo1.Lines[i];

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:27 30-07-2008 | Исправлено: Frodo_Torbins, 23:38 30-07-2008
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
удалено

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 08:36 31-07-2008 | Исправлено: greenpc, 08:36 31-07-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, помогите пожалуйста, уже который день не могу понять как правильно-то надо...
 

Код:
 
function SetConsoleTextToEdit(hWnd, hMemo : HWND; Programm, Commands : String) : Boolean;
const
  ReadBuffer = 2400;
var
  Security    : TSecurityAttributes;
  ReadPipe    : THandle;
  WritePipe   : THandle;
  start       : TStartUpInfo;
  ProcessInfo : TProcessInformation;
  Buffer      : PChar;
  BytesRead   : DWORD;
  Apprunning  : DWORD;
begin
  with Security do
    begin
      nlength              := SizeOf(TSecurityAttributes);
      binherithandle       := TRUE;
      lpsecuritydescriptor := nil;
    end;
  if Createpipe (ReadPipe, WritePipe, @Security, 0) then
    begin
      Buffer            := AllocMem(ReadBuffer + 1);
      FillChar(Start, Sizeof(Start), #0);
      start.cb          := SizeOf(start);
      start.hStdOutput  := WritePipe;
      start.hStdInput   := ReadPipe;
      start.dwFlags     := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
      start.wShowWindow := SW_HIDE;
      if CreateProcess(PChar(Programm), PChar(Commands), @Security, @Security, TRUE, NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then
        begin
          repeat
            Apprunning := WaitForSingleObject(ProcessInfo.hProcess, 100);
            ProcessMessages(hWnd);
          until
           (Apprunning <> WAIT_TIMEOUT);
          repeat
            BytesRead         := 0;
            ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);
            Buffer[BytesRead] := #0;
            OemToAnsi(Buffer, Buffer);
            SendMessage(hMemo, WM_SETTEXT, 0, Integer(Buffer));
          until
           (BytesRead < ReadBuffer);
        end;
      FreeMem(Buffer);
      CloseHandle(ProcessInfo.hProcess);
      CloseHandle(ProcessInfo.hThread);
      CloseHandle(ReadPipe);
      CloseHandle(WritePipe);
    end;
  Result := TRUE;
end;
 

Мне нужно запустить bat файл и отображать результаты выполнения в своей программе. Как прилепить в этот код?
На данный момент код такой из-за тестинга:

Код:
SetConsoleTextToEdit(hCnl, GetDlgItem(hCnl, IDC_EDT_CNSL),
PChar('C:\WINDOWS\system32\cmd.exe'),
PChar('help'));

Ранее былтакой, но почему то выводится только первая строчкаиз батника:

Код:
SetConsoleTextToEdit(hCnl, GetDlgItem(hCnl, IDC_EDT_CNSL),
PChar('file.bat'),
PChar(''));

Я не знаю как.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:45 31-07-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru