Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Top = 41

Width = 346

Height = 221

Align = alClient

BevelInner = bvLoweredBorder

Width = 4

Caption = 'Panel2'

TabOrder = 1

objectScrollBox: TScrollBox

Left = 6

Top = 6

Width = 334

Height = 209

HorzScrollBar.Margin = 6

HorzScrollBar.Range = 147

VertScrollBar.Margin = 6

VertScrollBar.Range = 198

Align = alClient

AutoScroll = False

BorderStyle = bsNone

TabOrder = 0

object Label1: TLabel

Left = 6

Top = 6

Width = 28

Height = 13

Caption = 'Name'

FocusControl = EditName

end

objectLabel2: TLabel

Left = 6

Top = 44

Width = 32

Height = 13

Caption = 'Capital'

FocusControl = EditCapital

end

objectLabel3: TLabel

Left = 6

Top = 82

Width = 45

Height = 13

Caption = 'Continent'

FocusControl = EditContinent

end

objectLabel4: TLabel

Left = 6

Top = 120

Width = 22

Height = 13

Caption = 'Area'

FocusControl = EditArea

end

objectLabel5: TLabel

Left = 6

Top = 158

Width = 50

Height = 13

Caption = 'Population'

FocusControl = EditPopulation

end

objectEditName: TDBEdit

Left = 6

Top = 21

Width = 135

Height = 21

DataField = 'Name'

DataSource = DataSource1

MaxLength = 0

TabOrder = 0

end

objectEditCapital: TDBEdit

Left = 6

Top = 59

Width = 135

Height = 21

DataField = 'Capital'

DataSource = DataSource1

MaxLength = 0

TabOrder = 1

end

objectEditContinent: TDBEdit

Left = 6

Top = 97

Width = 135

Height = 21

DataField = 'Continent'

DataSource = DataSource1

MaxLength = 0

TabOrder = 2

end

objectEditArea: TDBEdit

Left = 6

Top = 135

Width = 65

Height = 21

DataField = 'Area'

DataSource = DataSource1

MaxLength = 0

TabOrder = 3

end

objectEditPopulation: TDBEdit

Left = 6

Top = 173

Width = 65

Height = 21

DataField = 'Population'

DataSource = DataSource1

MaxLength = 0

TabOrder = 4

end

end

end

objectDataSource1: TDataSource

Left = 95

Top = 177

end

objectDatabase1: TDatabase

DatabaseName = 'DB1'

LoginPrompt = False

SessionName = 'Default'

Left = 128

Top = 176

end

end

Как вызывать функцию 16-битной DLL из 32-битного приложения?

Из советов Nomadic'a:

Надо использовать Thunks.

Кусок работающего только под Windows 95 кода —

const

Gfsr_SystemResources = 0;

Gfsr_GdiResources = 1;

Gfsr_UserResources = 2;

var

hInst16: THandle;

GFSR: Pointer;

{ Undocumented Kernel32 calls. }

functionLoadLibrary16(LibraryName: PChar): THandle; stdcall; externalkernel32 index35;

procedureFreeLibrary16(HInstance: THandle); stdcall; externalkernel32 index36;

functionGetProcAddress16(Hinstance: THandle; ProcName: PChar): Pointer; stdcall; externalkernel32 index37;

procedureQT_Thunk; cdecl; externalkernel32 name'QT_Thunk';

{ QT_Thunk needs a stack frame. }

{$StackFrames On}

{ Thunking call to 16-bit USER.EXE. The ThunkTrash argumentallocates space on the stack for QT_Thunk. }

functionNewGetFreeSystemResources(SysResource: Word): Word;

varThunkTrash: array[0..$20] ofWord;

begin

{ Prevent the optimizer from getting rid of ThunkTrash. }

ThunkTrash[0] := hInst16;

hInst16 := LoadLibrary16('user.exe');

ifhInst16 < 32 then raiseException.Create('Can''t load USER.EXE!');

{ Decrement the usage count. This doesn't really free the library, since USER.EXE is always loaded. }

FreeLibrary16(hInst16);

{ Get the function pointer for the 16-bit function in USER.EXE. }

GFSR := GetProcAddress16(hInst16, 'GetFreeSystemResources');

ifGFSR = nil then raiseException.Create('Can''t get address of GetFreeSystemResources!');

{ Thunk down to USER.EXE. }

asm

push SysResource { push arguments }

mov edx, GFSR { load 16-bit procedure pointer }

call QT_Thunk { call thunk }

mov Result, ax { save the result }

end;

end;

Как написать DLL, которую можно было-бы выполнить с помощью RunDll, RunDll32?

Из советов Nomadic'a:

Вы должны определить в программе вызываемую снаружи функцию.

Функция должна быть __stdcall (или WINAPI, что то же самое ;)) и иметь четыре аргумента. Первый – HWND окна, порождаемого rundll32 (можно использовать в качестве owner'а своих dialog box'ов), второй – HINSTANCE задачи, третий – остаток командной строки (LPCSTR, даже под NT), четвертый – не знаю ;).

Hапример –

int __stdcall __declspec(dllexport) Test (HWND hWnd, HINSTANCE hInstance, LPCSTR lpCmdLine, DWORD dummy) {

MessageBox(hWnd, lpCmdLine, "Command Line", MB_OK);

return 0;

}

Исполняем таким образом –

rundll32 test.dll,_Test@16 this is a command line

выдаст message box со строкой «this is a command line».

На Паскале –

Functiontest(hWnd: Integer; hInstance: Integer; lpCmdLine: PChar; dummy: Longint): Integer; StdCall; export;

begin

Windows.MessageBox(hWnd, lpCmdLine, 'Command Line', MB_OK);

Result := 0;

end;

Давненько я ждал эту информацию! Сел проверять и наткнулся на очень забавную вещь. А именно – пусть у нас есть исходник на Си пpимерно такого вида:

int WINAPI RunDll(HWND hWnd, HINSTANCE hInstance, LPCSTR lpszCmdLine, DWORD dummy);

……

int WINAPI RunDllW(HWND hWnd, HINSTANCE hInstance, LPCWSTR lpszCmdLine, DWORD dummy);

……

и .def-файл примерно такого вида:

EXPORTS

RunDll

RunDllA=RunDll

RunDllW

то rundll32 становится разборчивой — под NT вызывает UNICODE-версию. Под 95, разумеется, ANSI.

Продукты третьих фирм

Adobe

Читаем Adobe Acrobat PDF файлы из нашего приложения

Igor Nikolaev aKa The Spriteсоветует:

Adobe Acrobat PDF — хорошо известный формат, который нравится многим пользователям. Давайте посмотрим, как можно заставить приложение на Delphi прочитать файл такого формата.

Совместимость: Delphi 3.x (или выше)

Итак, Вы должны быть уверены, что у вас проинсталлирован Acrobat Reader, если таковой программы нет, то её можно скачать с www.adobe.com После этого необходимо проинсталировать типовую библиотеку для Acrobat (Project→Import Type Library из меню Delphi) выберите "Acrobat Control for ActiveX (version x)". Где x — текущая версия библиотеки. Hажмите кнопку инсталяции. Теперь создайте новое приложение, поместите на форму проинсталлированный компонент TPDF, далее добавите OpenDialog, и в заключении кнопку, при на нажатии на которую будет вызываться процедура открытия файла:

procedureTForm1.Button1Click(Sender: TObject);

begin

if OpenDialog1.Execute thenpdf1.src := OpenDialog1.FileName;

end;

в юните PdfLib_TLB вы можете найти интерфейс класса TPdf:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x