Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: OdesitVadim
Дата сообщения: 30.07.2008 13:35
SZap
Я думаю, стоит попробовать сделать своё маленькое приложение с TPageControl, где попробуйте сымитировать подопытное приложение. И эксперементируйте на нём.
Вполне может быть, что в самом приложении обрабатывается событие показа закладки и игнорирует его.
Мне встрачался код, где по таймеру их прятали, а сам таймер был настроен с интервалом 10. (человек был большой параноик).
Автор: SZap
Дата сообщения: 30.07.2008 14:41
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;
Автор: OdesitVadim
Дата сообщения: 30.07.2008 16:30
SZap
А если это не TPageControl, а например TabbedNotebook или какой нибудь другой, хитро зашифрованный? А поведение у него будет уже другое.
Вот именно по этой причине я рекомедую писать свое подопытное приложение, в котором попытаться сымитировать ситуацию.
Автор: SZap
Дата сообщения: 30.07.2008 18:03
OdesitVadim
Касательно того, что это TPageControl я уверен на все 100%.
Вопрос в том, что я даже не представляю в каком направлении копать с изменением свойства TabVisible с помощью API. Вот и прошу помощи у специалистов. А если это действительно не возможно, то хотелось бы понять почему...
Автор: V1s1ter
Дата сообщения: 30.07.2008 18:36
SZap
Есть программа которая это уже делает, в смысле высвечивает все сомпоненты в список и некоторые свойства можно менять, в частности Visible.
Называется ListWindows завтра, если надо, могу выложить.
Автор: SZap
Дата сообщения: 30.07.2008 20:08
V1s1ter
Visible я и сам могу поменять, вопрос в том как поменять TabVisible...
Автор: HolyDiablo
Дата сообщения: 30.07.2008 20:34
Не подскажете строчку(ки), чтобы поочередно добавлять в массив строчки из поля МЕМО и обратно? Пожалуйста, извините за глупый вопрос.


Добавлено:


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

Ну например:

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

end;
end;
Автор: Frodo_Torbins
Дата сообщения: 30.07.2008 22:27
SZap
Поменять TabVisible напрямую не получится.
Пейджконтрол, как и все наследники TCustomTabControl создают особое окно класса "SysTabControl32". Рисованием табов на таком окне занимается система, PageControl только управляет ими с помощью сообщений. Он ведет у себя список своих табшитов, и в зависимости от значения TabVisible добавляет, или удаляет табы из окна. Управлять этим списком снаружи никак нельзя. Можно только имитировать его работу с помощью хука.
HolyDiablo
Приблизительно так:

Код: [no]for i := 0 to Memo1.Lines.Count - 1 do
StrMas[i] := Memo1.Lines[i];[/no]
Автор: greenpc
Дата сообщения: 31.07.2008 07:36
удалено
Автор: Maks150988
Дата сообщения: 31.07.2008 10:45
Ребят, помогите пожалуйста, уже который день не могу понять как правильно-то надо...


Код:
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;
Автор: ShIvADeSt
Дата сообщения: 31.07.2008 13:02
Maks150988
тут вроде рабочий пример был
http://forum.ru-board.com/topic.cgi?forum=33&topic=7188#1
Автор: Maks150988
Дата сообщения: 02.08.2008 02:03
Спасибо. Еще есть вопрос. Как в диалоге Мастера можно переходить на нужную страницу?

PSM_SETCURSEL и PSM_SETCURSELID непонятные какие-то... Первой вообще фиг знает что надо подсовывать в качестве идентификатора/номера или одно и тоже, вообще чушь, вторая вообще фиг знает... Код такой:


Код:
{ &#212;&#243;&#237;&#234;&#246;&#232;&#255; &#238;&#225;&#240;&#224;&#225;&#238;&#242;&#234;&#232; &#232;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#224;&#246;&#232;&#232; &#228;&#232;&#224;&#235;&#238;&#227;&#238;&#226; &#236;&#224;&#241;&#242;&#229;&#240;&#224; }
function InitPropertySheetPage(hWnd : HWND) : Boolean;
var
PropPage : TPropSheetPage;
APropPage : Array [0..2] of HPROPSHEETPAGE;
PropHeader : TPropSheetHeader;
begin
// &#209;&#238;&#231;&#228;&#224;&#229;&#236; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#251; &#228;&#235;&#255; &#225;&#235;&#238;&#234;&#237;&#238;&#242;&#224;
APropPage[0] := CreatePropertySheetPage(PropPage);
PropPage.dwSize := SizeOf(PropPage);
PropPage.dwFlags := PSP_USETITLE or PSP_HIDEHEADER;
PropPage.pszTitle := PChar(Format(LoadStr(STR_MASTER_CAPT), [PChar(Format(LoadStr(STR_NAME_APPLIC), [GetVersionInfo(ParamStr(0), sfiFileVersion)]))]));
PropPage.hInstance := hInstance;
PropPage.pfnDlgProc := @IntrDlgProc;
PropPage.pszTemplate := MAKEINTRESOURCE(RES_DIALOGIN);
// &#200;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#224;&#246;&#232;&#255; &#239;&#229;&#240;&#226;&#238;&#233; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#251;
APropPage[1] := CreatePropertySheetPage(PropPage);
PropPage.dwFlags := PSP_USETITLE or PSP_USEHEADERTITLE or PSP_USEHEADERSUBTITLE;
PropPage.pszTitle := PChar(Format(LoadStr(STR_MASTER_CAPT), [PChar(Format(LoadStr(STR_NAME_APPLIC), [GetVersionInfo(ParamStr(0), sfiFileVersion)]))]));
PropPage.pszHeaderTitle := MAKEINTRESOURCE('&#207;&#229;&#240;&#226;&#224;&#255; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#224;');
PropPage.pszHeaderSubTitle := MAKEINTRESOURCE('&#207;&#229;&#240;&#226;&#224;&#255; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#224;');
PropPage.pszTemplate := MAKEINTRESOURCE(RES_DIALOGSR);
PropPage.pfnDlgProc := @SvrtDlgProc;
// &#200;&#237;&#232;&#246;&#232;&#224;&#235;&#232;&#231;&#224;&#246;&#232;&#255; &#226;&#242;&#238;&#240;&#238;&#233; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#251;
APropPage[2] := CreatePropertySheetPage(PropPage);
PropPage.dwFlags := PSP_USETITLE or PSP_USEHEADERTITLE or PSP_USEHEADERSUBTITLE;
PropPage.pszTitle := PChar(Format(LoadStr(STR_MASTER_CAPT), [PChar(Format(LoadStr(STR_NAME_APPLIC), [GetVersionInfo(ParamStr(0), sfiFileVersion)]))]));
PropPage.pszHeaderTitle := MAKEINTRESOURCE('2 &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#224;');
PropPage.pszHeaderSubTitle := MAKEINTRESOURCE('2 &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#224;');
PropPage.pszTemplate := MAKEINTRESOURCE(RES_DIALOGLR);
PropPage.pfnDlgProc := @LdrtDlgProc;
// &#209;&#238;&#231;&#228;&#224;&#229;&#236; &#231;&#224;&#227;&#238;&#242;&#238;&#226;&#234;&#243; &#228;&#235;&#255; &#241;&#242;&#232;&#235;&#255; &#239;&#238;&#236;&#238;&#249;&#237;&#232;&#234;&#224;
hHeadFont := CreateFont(18, 0, 0, 0, 800, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, 'Tahoma');
ZeroMemory(@PropHeader, SizeOf(PropHeader));
PropHeader.dwSize := SizeOf(PropHeader);
PropHeader.hInstance := hInstance;
PropHeader.hwndParent := hWnd;
PropHeader.phpage := @APropPage[0];
PropHeader.nStartPage := 0;
PropHeader.nPages := Length(APropPage);
PropHeader.pszbmWatermark := MAKEINTRESOURCE(IDB_WTMKHEAD);
PropHeader.pszbmHeader := MAKEINTRESOURCE(IDB_BTMPHEAD);
PropHeader.dwFlags := PSH_WIZARD97 or PSH_WATERMARK or PSH_HEADER or PSH_USEICONID;
PropHeader.pszIcon := MAKEINTRESOURCE(RES_ICONTOOL);
PropHeader.pfnCallback := nil;
// &#206;&#242;&#238;&#225;&#240;&#224;&#230;&#224;&#229;&#236; &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#243; &#239;&#238;&#236;&#238;&#249;&#237;&#232;&#234;&#224;
PropertySheet(PropHeader);
// &#211;&#228;&#224;&#235;&#255;&#229;&#236; &#226;&#241;&#229; &#241;&#238;&#231;&#228;&#224;&#237;&#237;&#251;&#229; &#238;&#225;&#250;&#229;&#234;&#242;&#251;
if hHeadFont <> 0
then DeleteObject(hHeadFont);
Result := TRUE;
end;
Автор: SZap
Дата сообщения: 04.08.2008 14:58
И еще раз... так и не понял...
почему при чтении дочерних окон TPageControl т.е. TabSheet, я не всегда получаю их полный список? Даже при условии что все TabSheet в Visible. Получаю полный список только когда предварительно перейду (активирую) на "не получаемую" закладку.
Автор: OdesitVadim
Дата сообщения: 04.08.2008 15:57
SZap
может у них просто "создание по надобности"?
Автор: bandyn
Дата сообщения: 04.08.2008 15:58
Может кто то делал на подобии или встречал такие компоненты подскажите
как сделать раскрывающийся список на каторый можно поместить несколько едитов комбобоксов и наподобии. примерно как в (Мой компьютер)
Автор: OdesitVadim
Дата сообщения: 04.08.2008 16:12
bandyn
типа этого http://www.tmssoftware.com/site/toolpanels.asp ?
в JVCL вроде было что то подобное и бесплатное.
Автор: shulum
Дата сообщения: 04.08.2008 19:32
bandyn
библиотека DevExpress - компонент dxNavBar
взять можно в этой ветке forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=38238#1
Автор: ShadowMen
Дата сообщения: 04.08.2008 20:28
Помогите реализовать алгоритм кодирования PDF417.
Если, можно пример. Оччень нужно реализовать печать штрихкода на бланках рецептов
Автор: shulum
Дата сообщения: 04.08.2008 20:55
ShadowMen
Barcode library with PDF417 support v.5.1 - хттп://www.psoft.sk/
спроси в варезнике - может кто имеет это добро ...
Автор: Maks150988
Дата сообщения: 05.08.2008 16:57
Хелп. Помогите перевести с Си на Делфи. Для плагина надо.

[more]
#pragma once

typedef DWORD (WINAPI* FN_HTTPDOWNLOAD)(const char* szURL, const char *szMethod, const char *szArgs, const char *szReferrer, const char *szContentType, BYTE *pBuffer, DWORD dwMaxBufferLen);

typedef HICON (WINAPI* FN_GETMODULEICON)();
typedef HMENU (WINAPI* FN_GETMODULEMENU)();
typedef BOOL (WINAPI* FN_PROCESSCONTEXTMENUCOMMAND)(DWORD dwCommand, const char* szAccount, const char* szPassword, FN_HTTPDOWNLOAD httpDownload);
typedef BOOL (WINAPI* FN_GETMODULEINFO)(char *szModuleName, DWORD dwMaxNameLen, char *szGUID, DWORD dwMaxGUIDLen, char *szModuleDescr, DWORD dwMaxDescrName);
typedef BOOL (WINAPI* FN_GETMODULEHINTS)(char *szLoginHint, DWORD dwLoginHintLen, char *szPasswordHint, DWORD dwPasswordHintLen, char *szForgetPasswordLink, DWORD dwLinkLen);
typedef BOOL (WINAPI* FN_GETACCOUNTSTATE)(const char* szAccount, const char* szPassword, double* dBalance, double* dOverdraft, double* dActive, double* dMinutes, char* szTarif, DWORD dwMaxTarifLen, DWORD *dwTarifDays, DWORD *dwTarifDaysLeft, char* szMessage, DWORD dwMaxMessageLen, FN_HTTPDOWNLOAD httpDownload);
typedef BOOL (WINAPI* FN_GETACCOUNTURLANDPOSTDATA)(const char* szAccount, const char* szPassword, char* szURL, DWORD dwURLLen, char* szPOSTData, DWORD dwPOSTDataLen);
typedef BOOL (WINAPI* FN_INITMODULE)(LPCTSTR lpszScriptPath);
typedef BOOL (WINAPI* FN_UNLOADMODULE)();

//GetModuleIcon Запрос иконки для учетной записи, относящейся к данному модулю
//Возвращает хэндл иконки или NULL
HICON APIENTRY GetModuleIcon();

//GetModuleIcon Запрос контекстного меню для учетной записи, относящейся к данному модулю
//Возвращает хэндл меню или NULL
//ВНИМАНИЕ! Для того, чтобы команды модуля обрабатывались корректно
//они должны иметь идентификатор > 40000
HMENU APIENTRY GetModuleMenu();

//ProcessContextMenuCommand Выполнение команды, выбранной в контекстном меню
//DWORD dwCommand                - Команда
//const char* szAccount            - Логил
//const char* szPassword        - Пароль
//FN_HTTPDOWNLOAD httpDownload    - указатель на функцию (см. объявление FN_HTTPDOWNLOAD)
BOOL APIENTRY ProcessContextMenuCommand(DWORD dwCommand, const char* szAccount, const char* szPassword, FN_HTTPDOWNLOAD httpDownload);

//GetModuleInfo Запрос информации о модуле
//char *szModuleName    - название модуля (отображается в списке операторов при создании/редактировании записи)
//DWORD dwMaxNameLen    - максимальная длина буффера под название модуля
//char *szGUID            - уникальный (!) GUID идентифицирующий модуль
//DWORD dwMaxGUIDLen    - максимальная длина буффера
//char *szModuleDescr    - описание модуля
//DWORD dwMaxDescrName    - максимальная длина буффера
BOOL APIENTRY GetModuleInfo(char *szModuleName, DWORD dwMaxNameLen, char *szGUID, DWORD dwMaxGUIDLen, char *szModuleDescr, DWORD dwMaxDescrName);

//Запрос подсказок, отображаемых при редактировании/создании записи
//char *szLoginHint                - логин (Например: Введите номер телефона)
//DWORD dwLoginHintLen            - максимальная длина буффера
//char *szPasswordHint            - пароль (Например: Введите номер ЕЛС)
//DWORD dwPasswordHintLen        - максимальная длина буффера
//char *szForgetPasswordLink    - ссылка на восстановление пароля
//DWORD dwLinkLen                - максимальная длина буффера
BOOL APIENTRY GetModuleHints(char *szLoginHint, DWORD dwLoginHintLen, char *szPasswordHint, DWORD dwPasswordHintLen, char *szForgetPasswordLink, DWORD dwLinkLen);

//Состояние записи, получение данных
//const char* szAccount            - Логил
//const char* szPassword        - Пароль
//double* dBalance                - Баланс
//double* dOverdraft            - Овердрафт
//double* dActive                - Активные сессии (если есть)
//double* dMinutes                - Минуты (если есть)
//char* szTarif                    - Тарифный план
//DWORD dwMaxTarifLen            - Максимальная длина буффера
//char* szMessage                - сообщение об ошибке
//DWORD dwMaxMessageLen            - Максимальная длина буффера
//FN_HTTPDOWNLOAD httpDownload    - указатель на функцию (см. объявление FN_HTTPDOWNLOAD)
BOOL APIENTRY GetAccountState(const char* szAccount, const char* szPassword, double* dBalance, double *dOverdraft, double* dActive, double* dMinutes, char* szTarif, DWORD dwMaxTarifLen, DWORD *dwTarifDays, DWORD *dwTarifDaysLeft, char* szMessage, DWORD dwMaxMessageLen, FN_HTTPDOWNLOAD httpDownload);

//Запрос данных для открытия WEB страницы
//const char* szAccount            - Логил
//const char* szPassword        - Пароль
//char* szURL                    - Адрес страницы
//DWORD dwURLLen                - Максимальная длина буффера
//char* szPOSTData                - Данные для отправки на сервер
//DWORD dwPOSTDataLen            - Максимальная длина буффера
BOOL APIENTRY GetAccountURLAndPostData(const char* szAccount, const char* szPassword, char* szURL, DWORD dwURLLen, char* szPOSTData, DWORD dwPOSTDataLen);

//Инициализация ресурсов
BOOL APIENTRY InitModule(LPCTSTR lpszScriptPath);

//Освобождение ресурсов
BOOL APIENTRY UnloadModule();

typedef struct ACCOUNT_STATE
{
    ACCOUNT_STATE()
    {
        szTarif[0]        = '\0';
        szMessage[0]    = '\0';

        dBalance        = 0.0f;
        dOverdraft        = 0.0f;
        dActive            = 0.0f;
        dMonthMinutes    = 0.0f;

        dwTarifDays        = MAXDWORD;
        dwTarifDaysLeft    = MAXDWORD;
    }

    char*    szAccount;
    char*    szPassword;

    double    dBalance;
    double    dOverdraft;
    double    dActive;
    double    dMonthMinutes;
    char    szTarif[1024];
    char    szMessage[1024];
    DWORD    dwTarifDays;
    DWORD    dwTarifDaysLeft;
    
    FN_HTTPDOWNLOAD httpDownload;
}
ACCOUNT_STATE;
[/more]
Автор: V1s1ter
Дата сообщения: 06.08.2008 14:26
Maks150988

Цитата:
Хелп. Помогите перевести с Си на Делфи. Для плагина надо


Перевести не помогу, на работе завал, но програмки для атоперевода могу скинуть.
После них правда ручками еще поработать прийдется, но часть рутины сделают.
Надумаешь пиши.
Автор: Maks150988
Дата сообщения: 06.08.2008 18:44
V1s1ter
Я скачал c2pas (по рекомендациям судя по большинству форумов), но она не переконвертировала:

Код: function UnloadModule(): BOOL; stdcall;
ACCOUNT_STATE = record
{!!!3 unknown typedef}
end;
Автор: RomanIlc
Дата сообщения: 06.08.2008 23:43

Цитата:
Помогите реализовать алгоритм кодирования PDF417.
Если, можно пример. Оччень нужно реализовать печать штрихкода на бланках рецептов

В ReportBuilder видел печать штрих-кодов - но только на картинке, что там внутри не смотрел
Автор: ShIvADeSt
Дата сообщения: 07.08.2008 06:33
Maks150988

Цитата:
Я скачал c2pas (по рекомендациям судя по большинству форумов), но она не переконвертировала:

Код:
function UnloadModule(): BOOL; stdcall;
ACCOUNT_STATE = record
{!!!3 unknown typedef}
end;

Так вот хочется чтобы было все. Впринципе весь код модуля это чистый Апи.

Насколько я понял в том куске идет создание record и первоначальная его инициализация, не знаю умеет ли Дельфи делать сразу присвоение внутри записи (насколько знаю нет), тогда вначале объяви запись, а потом сделай инициализацию основных полей
сама запись

Код:
char* szAccount;
char* szPassword;

double dBalance;
double dOverdraft;
double dActive;
double dMonthMinutes;
char szTarif[1024];
char szMessage[1024];
DWORD dwTarifDays;
DWORD dwTarifDaysLeft;

FN_HTTPDOWNLOAD httpDownload;
Автор: RomanIlc
Дата сообщения: 07.08.2008 12:58
To: bandyn


Цитата:
Может кто то делал на подобии или встречал такие компоненты подскажите
как сделать раскрывающийся список на каторый можно поместить несколько едитов комбобоксов и наподобии. примерно как в (Мой компьютер)

В AlphaControls есть компонент похожий, TFrameBar по-моему, он на основе фреймов сделан - может понравится, ну а к стандартному виндовому конечно TdxNavBar ближе всего
Автор: Maks150988
Дата сообщения: 07.08.2008 23:10
ShIvADeSt

Ну я пока сделал так:

[more]
library MODULE_DELPHI;

{$R Resources.res}

uses
Windows, Messages;

type
FN_HTTPDOWNLOAD = function(szURL: PChar; szMethod: PChar; szArgs: PChar; szReferrer: PChar; szContentType: PChar; pBuffer: pBYTE; dwMaxBufferLen: DWORD): DWORD; stdcall;
FN_GETMODULEICON = function: HICON; stdcall;
FN_GETMODULEMENU = function: HMENU; stdcall;
FN_PROCESSCONTEXTMENUCOMMAND = function(dwCommand: DWORD; szAccount: PChar; szPassword: PChar; httpDownload: FN_HTTPDOWNLOAD): BOOL; stdcall;
FN_GETMODULEINFO = function(szModuleName: PChar; dwMaxNameLen: DWORD; szGUID: PChar; dwMaxGUIDLen: DWORD; szModuleDescr: PChar; dwMaxDescrName: DWORD): BOOL; stdcall;
FN_GETMODULEHINTS = function(szLoginHint: PChar; dwLoginHintLen: DWORD; szPasswordHint: PChar; dwPasswordHintLen: DWORD; szForgetPasswordLink: PChar; dwLinkLen: DWORD): BOOL; stdcall;
FN_GETACCOUNTSTATE = function(szAccount: PChar; szPassword: PChar; dBalance: pDouble; dOverdraft: pDouble; dActive: pDouble; dMinutes: pDouble; szTarif: PChar; dwMaxTarifLen: DWORD; dwTarifDays: pDWORD; dwTarifDaysLeft: pDWORD; szMessage: PChar; dwMaxMessageLen: DWORD; httpDownload: FN_HTTPDOWNLOAD): BOOL; stdcall;
FN_GETACCOUNTURLANDPOSTDATA = function(szAccount: PChar; szPassword: PChar; szURL: PChar; dwURLLen: DWORD; szPOSTData: PChar; dwPOSTDataLen: DWORD): BOOL; stdcall;
FN_INITMODULE = function(lpszScriptPath: LPCTSTR): BOOL; stdcall;
FN_UNLOADMODULE = function: BOOL; stdcall;

ACCOUNT_STATE = record
szAccount: PChar;
szPassword: PChar;
dBalance: pDouble;
dOverdraft: pDouble;
dActive: pDouble;
dMonthMinutes: pDouble;
szTarif: PChar;
szMessage: PChar;
dwTarifDays: DWORD;
dwTarifDaysLeft: DWORD;
httpDownload: FN_HTTPDOWNLOAD;
end;

function GetModuleIcon: HICON; stdcall;
begin
Result := LoadIcon(hInstance, MAKEINTRESOURCE(101));
end;

function GetModuleMenu: HMENU; stdcall;
begin
Result := LoadMenu(hInstance, MAKEINTRESOURCE(101));
end;

function ProcessContextMenuCommand(dwCommand: DWORD; szAccount: PChar; szPassword: PChar; httpDownload: FN_HTTPDOWNLOAD): BOOL; stdcall;
begin
Result := TRUE;
end;

function GetModuleInfo(szModuleName: PChar; dwMaxNameLen: DWORD; szGUID: PChar; dwMaxGUIDLen: DWORD; szModuleDescr: PChar; dwMaxDescrName: DWORD): BOOL; stdcall;
begin
szModuleName := 'GlooMen Telecom';
Result := TRUE;
end;

function GetModuleHints(szLoginHint: PChar; dwLoginHintLen: DWORD; szPasswordHint: PChar; dwPasswordHintLen: DWORD; szForgetPasswordLink: PChar; dwLinkLen: DWORD): BOOL; stdcall;
begin
szLoginHint := PChar('&#194;&#226;&#229;&#228;&#232;&#242;&#229; &#226; &#253;&#242;&#238; &#239;&#238;&#235;&#229; &#237;&#238;&#236;&#229;&#240; &#243;&#247;&#229;&#242;&#237;&#238;&#233; &#231;&#224;&#239;&#232;&#241;&#232; &#226; &#241;&#232;&#241;&#242;&#229;&#236;&#229;');
dwLoginHintLen := 255;
szPasswordHint := PChar('&#194;&#226;&#229;&#228;&#232;&#242;&#229; &#226; &#253;&#242;&#238; &#239;&#238;&#235;&#229; &#239;&#224;&#240;&#238;&#235;&#252;');
dwPasswordHintLen := 255;
szForgetPasswordLink := PChar('http://&#209;&#241;&#251;&#235;&#234;&#224; &#237;&#224; &#226;&#238;&#241;&#241;&#242;&#224;&#237;&#238;&#226;&#235;&#229;&#237;&#232;&#229; &#239;&#224;&#240;&#238;&#235;&#255;');
dwLinkLen := 255;
Result := TRUE;
end;

function GetAccountState(szAccount: PChar; szPassword: PChar; dBalance: pDouble; dOverdraft: pDouble; dActive: pDouble; dMinutes: pDouble; szTarif: PChar; dwMaxTarifLen: DWORD; dwTarifDays: pDWORD; dwTarifDaysLeft: pDWORD; szMessage: PChar; dwMaxMessageLen: DWORD; httpDownload: FN_HTTPDOWNLOAD): BOOL; stdcall;
begin
Result := TRUE;
end;

function GetAccountURLAndPostData(szAccount: PChar; szPassword: PChar; szURL: PChar; dwURLLen: DWORD; szPOSTData: PChar; dwPOSTDataLen: DWORD): BOOL; stdcall;
begin
Result := TRUE;
end;

function InitModule(lpszScriptPath: LPCTSTR): BOOL; stdcall;
begin
Result := TRUE;
end;

function UnloadModule: BOOL; stdcall;
begin
Result := TRUE;
end;

exports
GetModuleIcon,
GetModuleMenu,
ProcessContextMenuCommand,
GetModuleInfo,
GetModuleHints,
GetAccountState,
GetAccountURLAndPostData,
InitModule,
UnloadModule;

begin
end.
[/more]

Скажите пожалуйста где надо точно инициализировать эти поля записи. И хотелось бы узнать как например в функции GetModuleHints проинициализировать ее параметры - компилятор пишет что они не будут проинициализированы. Немного непонятно как-то.
Автор: Pawo
Дата сообщения: 08.08.2008 00:29
Вопрос к спецам.
Была одна программа на паскале, отмеряла время. Т.е. на LPT-порт подавался сигнал, после чего программа начинала отсчитывать время. Потом подавался другой сигнал (тоже ч-з LPT), после которого таймер останавлисался, и после этого программа выдавала, сколько милисекунд прошло между 1-м и 2-м сигналом. Но перед этим, она перепрограммировала системный таймер. На паскале это делалось так:

Код: uses crt,dos;
var ho,mi,se,hu,ss,pv,pn:word;
l,h,ol,ne:byte;
co,m:integer;
dt:real;
begin
clrscr;
READLN(co);
l:=lo(co);
h:=hi(co);
writeln(co,' ',l,' ',h);
port[$43]:=182;
port[$40]:=l;
port[$40]:=h;
{$B+}
repeat until port[$379]=112;
SetTime(0,0,0,0);
repeat until port[$379]=67;
GetTime(ho,mi,se,ss);
co:=0;
l:=lo(co);
h:=hi(co);
writeln(co,' ',l,' ',h);
port[$43]:=182;
port[$40]:=l;
port[$40]:=h;
writeln('ho=',ho,' mi=',mi,' se=',se,'ss=',ss);
dt:=ho*36000+mi*600+se*10+ss/10;
writeln ('dt=',dt:7:5);
readln;
end.
Автор: ShIvADeSt
Дата сообщения: 08.08.2008 01:36
Maks150988

Цитата:
function GetModuleHints(szLoginHint: PChar; dwLoginHintLen: DWORD; szPasswordHint: PChar; dwPasswordHintLen: DWORD; szForgetPasswordLink: PChar; dwLinkLen: DWORD): BOOL; stdcall;
begin
szLoginHint := PChar('&#194;&#226;&#229;&#228;&#232;&#242;&#229; &#226; &#253;&#242;&#238; &#239;&#238;&#235;&#229; &#237;&#238;&#236;&#229;&#240; &#243;&#247;&#229;&#242;&#237;&#238;&#233; &#231;&#224;&#239;&#232;&#241;&#232; &#226; &#241;&#232;&#241;&#242;&#229;&#236;&#229;');
dwLoginHintLen := 255;

Судя по всему должен быть возврат данных из функции в программу, тогда надо добавить var примерно так
function GetModuleHints(var szLoginHint: PChar; .....
далее, для постоянного текста не обязательно делать преобразование через PChar можно так
szLoginHint='MyCoolHint';
dwLoginHintLen=255 - это неправильно, надо dwLoginHintLen=strlen(szLoginHint)+1;
насчет +1 не уверен, в противном случае у тебя может при обработке строк попасть мусор, так как обрабатываться PChar будет в зависимости от длины, которую ты вернешь.
Автор: Dimoniusis
Дата сообщения: 08.08.2008 08:45
Maks150988 тебе ShIvADeSt уже часть ошибок рассазал. А проинициализировать рекорд можно в какой-нибудь из функций создания - тех же INIt'ах до Result:=True; Думаю, что инит в общем то для этого и сделан.

Автор: Maks150988
Дата сообщения: 08.08.2008 10:25
Dimoniusis
InitModule вообще не используется. Автор вообще наотрез отказывается дать исходник полный. Поэтому не знаю чего и как. Он сказала только что PChar это типа "отдается указатель на память в который модуль должен скопировать строку".
Ну я не знаю как правильнее то, сделал так. Вроде работает.=)

Код:
var
TszModuleName : String = '===';
TszModuleDescr : String = '===';
TszGUID : String = '===';

function GetModuleInfo(szModuleName: PChar; dwMaxNameLen: DWORD; szGUID: PChar; dwMaxGUIDLen: DWORD; szModuleDescr: PChar; dwMaxDescrName: DWORD): BOOL; stdcall;
begin
dwMaxNameLen := strlen(PChar(TszModuleName)) + 1;
StrLCopy(szModuleName, PChar(TszModuleName), dwMaxNameLen);
dwMaxDescrName := strlen(PChar(TszModuleDescr)) + 1;
StrLCopy(szModuleDescr, PChar(TszModuleDescr), dwMaxDescrName);
dwMaxGUIDLen := strlen(PChar(TszGUID)) + 1;
StrLCopy(szGUID, PChar(TszGUID), dwMaxGUIDLen);
Result := TRUE;
end;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.