-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstreams.html
195 lines (187 loc) · 8.61 KB
/
streams.html
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
---
dl-file-prefix: "dd-streams-"
layout: "codelib-tplt"
group: lib
priority: 16
version: "3.1.2"
release-date: "2014-01-12"
platforms: ["Win32", "Win64"]
frameworks: ["RTL"]
compatibility: "Delphi 4 & later"
title: "Stream Extension Classes"
precis: "Several classes to wrap and operate on TStream classes"
summary: "Source code of classes that provide a means to wrap TStream classes. Provides a base stream wrapper class and classes that implement the IStream interface."
meta-title: "TStream Extension Classes for Delphi Pascal | Open Source | 32 & 64 bit"
meta-desc: "Delphi Pascal classes that wrap and operate on TStream classes: a base stream wrapper & various IStream adapter classes. Requires Delphi 4 & later."
download-base-url: "https://sourceforge.net/projects/ddablib/files/streams/"
repo-url: "https://github.com/ddablib/streams"
docs-url: "https://github.com/delphidabbler/ddab-lib-docs/blob/master/Docs/Streams.md"
want-header-buttons: true
status: "current"
---
{% assign dl-file = page.dl-file-prefix | append: page.version | append: ".zip" %}
{% assign dl-url = page.download-base-url | append: dl-file %}
<section class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
Overview
</h2>
</div>
<div class="panel-body">
<p>
This library provides some classes that can be used to extend the functionality of Delphi's <var>TStream</var> classes.
</p>
<p>
The classes provided are:
</p>
<ul class="wide">
<li>
A <var>TStream</var> derived class which can wrap another <var>TStream</var>. This is useful as a base class for filters to wrap round existing stream classes.
</li>
<li>
A set of classes that wrap existing streams and provide an <var>IStream</var> interface to them – like Delphi's previously undocumented <var>TStreamAdapter</var> class. Also included is a class that provides a <var>IStream</var> interface to any file or any handle stream.
</li>
</ul>
<h3 data-toggle="collapse" data-target="#unit-tests" class="collapsible collapsed">
Unit tests
</h3>
<div id="unit-tests" class="collapse"> <!-- begin collapsible #unit-tests section -->
<p>
Unit tests are provided for the classes in the <code>Tests</code> directory. You need to have DUnit installed in order to run these tests.
</p>
</div> <!-- /#unit-tests -->
<h3 data-toggle="collapse" data-target="#demo" class="collapsible collapsed">
Demo code
</h3>
<div id="demo" class="collapse"> <!-- begin collapsible #demo section -->
<p>
Three demo projects are provided in the download:
</p>
<ol class="wide">
<li>
<code>IStreamWrap.dpr</code> in the <code>IStreamWrapDemo</code> sub-directory. This is a VCL project that demonstrates the IStream wrapper classes in the <var>PJIStreams</var> unit.
</li>
<li>
<code>IStreamWrapFMX.dpr</code> in the <code>IStreamWrapDemoFMX</code> sub-directory. This is a FireMonkey 2 project that demonstrates the IStream wrapper classes in the <var>PJIStreams</var> unit. It is similar, but not identical, to <code>IStreamWrap.dpr</code>.
</li>
<li>
<code>StreamWrap.dpr</code> in the <code>StreamWrapDemo</code> sub-directory. This is a VCL project that demonstrates the <var>PJStreamWrapper</var> unit.
</li>
</ol>
</div> <!-- /#demo -->
</div>
</section>
<section class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
Get The Code
</h2>
</div>
<div class="panel-body">
<p>
You can download the latest version of the <em>{{page.title}}</em> directly from SourceForge as <code>{{ dl-file }}</code>.
</p>
<p class="text-center">
<a class="btn btn-primary" role="button" href="{{ dl-url }}" aria-label="Go to SourceForge and download latest version automatically">Download <span class="hidden-xs">release </span>v{{ page.version }}<span class="hidden-xs"> from SourceForge</span></a>
</p>
<p>
The <em>{{ page.title }}</em> source code is hosted in the <a href="{{ page.repo-url }}" aria-label="Link to the ddablib/streams repository on GitHub"><code>ddablib/streams</code></a> GitHub repository. You can <code>git clone</code> or fork the repository as required.
</p>
</section>
<section class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
Installation
</h2>
</div>
<div class="panel-body">
<p>
The <em>{{ page.title }}</em>, documents, demos and unit tests are supplied in a zip file. Before installing you need to extract all the files from the zip file, preserving the directory structure. The following files will be extracted:
</p>
<ul class="list-group">
<li class="list-group-item">
<strong><code>PJStreamWrapper.pas</code></strong> – source code of the <var>TPJStreamWrapper</var> class.
</li>
<li class="list-group-item">
<strong><code>PJIStreams.pas</code></strong> – source code of classes that implement the <var>IStream</var> interface.
</li>
<li class="list-group-item">
<code>ReadMe.htm</code> – read-me file.
</li>
<li class="list-group-item">
<code>ChangeLog.txt</code> – project change log.
</li>
<li class="list-group-item">
<code>MPL-2.txt</code> – the Mozilla Public License v2.0.
</li>
<li class="list-group-item">
<code>Documentation.URL</code> – short-cut to the unit's online documentation.
</li>
</ul>
<p>
There are also demo projects in the <code>Demos</code> directory and unit tests in the <code>Tests</code> directory.
</p>
<p>
There are three possible ways to use the units.
</p>
<ol class="wide">
<li>
The simplest way is to add the units <code>PJStreamWrapper.pas</code> and <code>PJIStreams.pas</code> to your projects as you need them.
</li>
<li>
To make the units easier to re-use you can either copy them to a folder on your Delphi search path, or add the folder where you extracted the units to the search path. You then simply use the units as required without needing to add them to your project.
</li>
<li>
For maximum portability you can add the units to a Delphi design time package. If you need help doing this <a href="{{ site.data.core.install-to-ide-link }}" aria-title="see a tip on working with design time packages">see here</a>.
</li>
</ol>
</div>
</section>
<section class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
Documentation
</h2>
</div>
<div class="panel-body">
<p>
The <em>{{ page.title }}</em> are comprehensively documented online <a href="{{ page.docs-url }}" aria-title="View the online documentation">here</a>
</p>
<p>
The project's change log can be viewed <a href="https://raw.githubusercontent.com/ddablib/streams/main/Docs/ChangeLog.txt" aria-title="View the change log in plain text">here</a>.
</p>
<p>
A read-me file (<code>ReadMe.htm</code>) is included in the project download.
</p>
</div>
</section>
<section class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title" id="feedback">
Feedback & Queries
</h2>
</div>
<div class="panel-body">
<p>
If you find any bugs or want to suggest a new feature please report them using the <em>{{page.title}}</em> <a href="https://github.com/ddablib/streams/issues">issue tracker</a>.
</p>
<p>
If you have created a bug fix or have implemented a new feature please open a pull request for it.
</p>
<p>
Should you have any queries about using the classes please read the <a href="{{ page.docs-url }}">documentation</a>. If you can't find an answer in the documentation then post a message in the <a href="https://github.com/orgs/ddablib/discussions">discussion group</a>.
</p>
</div>
</section>
<section class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
License
</h2>
</div>
<div class="panel-body">
<p>
<span class="fa fa-copyright fa-pull-left fa-3x"></span> The <em>{{ page.title }}</em> are open source. They are copyright © 2000-2014 by <a href="https://en.gravatar.com/delphidabbler" aria-label="Peter Johnson's Gravatar account">Peter Johnson</a>. The source code is made available under the terms of the <a href="https://www.mozilla.org/MPL/2.0/" aria-label="Mozilla Public License v2.0 on mozilla.org">Mozilla Public License v2.0</a>. All relevant trademarks are acknowledged.
</p>
</div>
</section>