This is a simple utility written in Delphi that allows you to set Chrome as your default PDF viewer. It also wraps the PDF viewer giving it a differente look.
![Click to large size! İmage]()
↧
Chrome PDF Reader
↧
DarkDesktop
Simple application that will allow you to dim your monitor in order to protect your eyes from excessive glare, specially on nights.This is only working on Windows 7 and newer. Not tested on Vista or below.Notice: This application needs digital code signing in order to make it work over ModernUI applications.
![Click to large size! İmage]()
↧
↧
Magenta Systems WMI and SMART Component v5.5 DX10.1
Magenta Systems WMI and SMART Component
Home: Code:
Introduction
Magenta Systems WMI and SMART Component contains WMI, SMART and SCSI Pass
Through functions, of particular use for getting hard disk information and
configuring network adaptors, but also for many other general uses.
MagWMI which allows access and update of windows system information using
Windows Management Instrumentation. MagWMI provides general view access
to any WMI information using SQL like commands, and also a number of
dedicated function relating to TCP/IP configuration, such as setting the
adaptor IP addresses, the computer name, domain/workgroup, BIOS and disk
drive information.
...
Magenta Systems WMI and SMART Component v5.5
Home: Code:
PHP Code:
http://www.magsys.co.uk/delphi/magwmi.asp
Magenta Systems WMI and SMART Component contains WMI, SMART and SCSI Pass
Through functions, of particular use for getting hard disk information and
configuring network adaptors, but also for many other general uses.
MagWMI which allows access and update of windows system information using
Windows Management Instrumentation. MagWMI provides general view access
to any WMI information using SQL like commands, and also a number of
dedicated function relating to TCP/IP configuration, such as setting the
adaptor IP addresses, the computer name, domain/workgroup, BIOS and disk
drive information.
...
Magenta Systems WMI and SMART Component v5.5
- Added missed function MagWmiGetInfoExASSOCIATORS for XE10.1
↧
TMS Component Pack 8.3.4.0 Full Source D7-DX10.1 Win32-Win64 Retail 2016-09-23
More: You can't view the links! Click here to register
Archive type RAR5!
Big Brother is watching you!![Click to large size! İmage]()
ALL Components ONLY(!!!) for PRIVATE(!!!) USE !
LEARN the RULES of the forum FIRST: You can't view the links! Click here to register
WHO will WRITE the MESSAGE, GET BANNED !!! RULES 1.2 !
PRESS the BUTTON Thanks + ONLY!
Archive type RAR5!
Big Brother is watching you!

ALL Components ONLY(!!!) for PRIVATE(!!!) USE !
LEARN the RULES of the forum FIRST: You can't view the links! Click here to register
WHO will WRITE the MESSAGE, GET BANNED !!! RULES 1.2 !
PRESS the BUTTON Thanks + ONLY!
↧
Google AdSense for Business and Beginners

Google AdSense for Business and Beginners
English + 1.16 GB
Take this course to learn the basics of Google AdSense based on my experience building a Google AdSense business!
If you want to learn how to use Google AdSense to monetize your website, you can find a lot of practical tips and motivation in this course! When I started out, I had no idea how to actually get an Google AdSense website to make money. I may have never learned unless I took a step to purchase an Google AdSense website from someone else.
I took what I learned from purchasing that website to create more websites that turned out to be even more profitable. Now, I have taken my experience and packaged it into this course. I spent $2500 on my first website to be able to learn how to run a successful Google AdSense website.
$2500! And since that time I have spent hundreds of hours figuring out how to improve my Google AdSense earnings and determining what makes a site successful. Take what I learned about buying Google AdSense websites and creating my own to start your very own Google AdSense empire at a fraction of what it cost me to do it!
If you are going to learn a skill from someone, you want to learn from the one who has successfully achieved the goal you want. Is your goal to make enough money to live off of from Google AdSense? I have already been there and done that. I have made over $100,000 in one year from Google AdSense.
Take this course today to get lifetime access to everything I know about Google AdSense in just a few hours!
Code:
http://nitroflare.com/view/5DC099FC337A348/GOADFOBABs.part1.rar
http://nitroflare.com/view/670BD590E210AEC/GOADFOBABs.part2.rar
http://nitroflare.com/view/1AA8AB6B19426EA/GOADFOBABs.part3.rar
http://nitroflare.com/view/F53CBBEB8597244/GOADFOBABs.part4.rar
http://nitroflare.com/view/CEA2328A9A2A302/GOADFOBABs.part5.rar
Code:
http://k2s.cc/file/d80aa20a2e3cd/GOADFOBABs.part1.rar
http://k2s.cc/file/c223ce02a375a/GOADFOBABs.part2.rar
http://k2s.cc/file/023432295bdb5/GOADFOBABs.part3.rar
http://k2s.cc/file/ac0e2224f4888/GOADFOBABs.part4.rar
http://k2s.cc/file/a84d57665ba22/GOADFOBABs.part5.rar
↧
↧
XLSReadWriteII.v.5.20.67 D7-XE10.1
↧
John Reese - Traffic Secrets 2016 English +

John Reese - Traffic Secrets 2016
English + 2.21 GB
"The Great Traffic Evolution!"
What you absolutely must do in 2016 to grow your business online!
Here's What This Eye-Opening FREE Video Series Reveals:
How to get more leads & customers to your site today!
The "B-C-B Foundation" and why you need to always focus on it.
How "Macro-Targeting" and "Micro-Targeting" changed everything.
What "Traffic Recycling" is and why it's so valuable for you.
Traffic Retargeting, Conversion Outliers, and more!
The impact of "Source Value Hierarchy" on your profit!
23 Common & Uncommon Traffic-Getting Mistakes!
And much, much more!
Are You Ready To Drive An Ongoing
Stampede Of High Quality Laser-Targeted
Leads & New Customers To Your Web Site?
"TRAFFIC SECRETS 2016"
6-Week Intensive Online Class
* This is the first-time ever this new class is being taught.
(24) Master Traffic-Getting Modules
(250+) Video "How-To" Lessons
Blueprints, Cheatsheets, Checklists!
Software Tools & Scripts
Interactive Quizzes & Tests
Gamification Badges & Awards
And Much, Much More!
Who Is This Ground-Breaking Traffic Class For?
Beginners & Advanced Marketers
New & Existing Entrepreneurs
Business Coaches
Marketing Consultants
Affiliate Marketers
Online Store Owners
InfoProduct Sellers
Life Coaches
Authors
SAAS Developers
And Many More!
(24) Master Traffic-Getting Modules
The Foundation
Spying On Your Competitors
Market Discovery
Copywriting Secrets
Keyword Science
Email Marketing Tactics
Google AdWords Mastery
Buying Media & Sponsorships
Shopping Engines & Amazon
Your Affiliate Army
Facebook Ads Architect
Traffic Retargeting
Social Media Strategy
Podcasts & Broadcasts
Mobile App Marketing
Software & Widgets
Google SEO Dynamics
Building A Content Factory
Content Curation Methods
YouTube Marketing
Traffic Recycling
International Opportunities
Expansion & Scalability
The Master Plan
Code:
http://nitroflare.com/view/C85DDBB9CF5B9D9/JRAARTS2016.part1.rar
http://nitroflare.com/view/0F485D3AA1DA64C/JRAARTS2016.part2.rar
http://nitroflare.com/view/CD2A12728227BF4/JRAARTS2016.part3.rar
http://nitroflare.com/view/522331E3CC74A8A/JRAARTS2016.part4.rar
http://nitroflare.com/view/0F49E2B351FB52C/JRAARTS2016.part5.rar
Code:
http://k2s.cc/file/b760e3340f8e7/JRAARTS2016.part1.rar
http://k2s.cc/file/d164dceece1f4/JRAARTS2016.part2.rar
http://k2s.cc/file/553781f6999d5/JRAARTS2016.part3.rar
http://k2s.cc/file/a8ba301d4387b/JRAARTS2016.part4.rar
http://k2s.cc/file/a67fd9835adec/JRAARTS2016.part5.rar
↧
Delphi REST client API to consume REST
Delphi REST Client API
A Delphi REST client API to consume REST services written in any programming language.
The API was tested in Delphi 7, XE, XE2, XE3, XE4 and XE7. It is also compatible with Mac OSX and iOS.
Connection Layer
There are a IHttpConnection interface to abstract the real Http conection. This interface currently have two implementations, using Indy 10, WinHTTP and WinInet.
Indy 9 does not handles HTTP response codes correctly, then if you are using Delphi 7, you must update your indy library to version 10 or use WinHttp (recommended). To disable indy support comment the compiler directive {.$DEFINE USE_INDY} in DelphiRest.inc file.
Serialization/Desserialization
The objects are transmitted in JSON format. To function properly, the object must be declared as follows, with public fields.
TPerson = class(TObject)
public
(* Reflect the server side object field names, for Java must be case-sensitive *)
id: Integer;
name: String;
email: String;
(* Static constructor *)
class function NewFrom(Id: Integer; Name, EMail: String): TPerson;
end;
See more details about serialization here: Serialization
Samples
Note that all code below assume you have installed the component in your IDE and dropped the RestClient component on a form or data module, but of course you can also create the component directly in your code.
GET
var
vList : TList<TPerson>;
begin
vList := RestClient.Resource('http://localhost:8080/java-rest-server/rest/persons')
.Accept(RestUtils.MediaType_Json)
.Get<TList<TPerson>>();
GET ONE
var
vPerson : TPerson;
begin
vPerson := RestClient.Resource('http://localhost:8080/java-rest-server/rest/person/1')
.Accept(RestUtils.MediaType_Json)
.Get<TPerson>();
POST
var
vPerson : TPerson;
begin
vPerson := TPerson.NewFrom(123, 'Fabricio', 'fabricio.colombo.mva@gmail.com');
RestClient.Resource('http://localhost:8080/java-rest-server/rest/person')
.Accept(RestUtils.MediaType_Json)
.ContentType(RestUtils.MediaType_Json)
.Post<TPerson>(vPerson);
PUT
var
vPerson : TPerson;
begin
vPerson := //Load person
vPerson.Email := 'new@email.com';
RestClient.Resource('http://localhost:8080/java-rest-server/rest/person')
.Accept(RestUtils.MediaType_Json)
.ContentType(RestUtils.MediaType_Json)
.Put<TPerson>(vPerson);
DELETE
var
vPerson : TPerson;
begin
vPerson := //Load person
RestClient.Resource('http://localhost:8080/java-rest-server/rest/person')
.Accept(RestUtils.MediaType_Json)
.ContentType(RestUtils.MediaType_Json)
.Delete(vPerson);
GET AS DATASET
The fields need be predefined.
var
vDataSet: TClientDataSet;
begin
vDataSet := TClientDataSet.Create(nil);
try
TDataSetUtils.CreateField(vDataSet, ftInteger, 'id');
TDataSetUtils.CreateField(vDataSet, ftString, 'name', 100);
TDataSetUtils.CreateField(vDataSet, ftString, 'email', 100);
vDataSet.CreateDataSet;
RestClient.Resource(CONTEXT_PATH + 'persons')
.Accept(RestUtils.MediaType_Json)
.GetAsDataSet(vDataSet);
finally
vDataSet.Free;
end;
GET AS DYNAMIC DATASET
The fields are created dynamically according to the returned content.
var
vDataSet: TDataSet;
begin
vDataSet := RestClient.Resource(CONTEXT_PATH + 'persons')
.Accept(RestUtils.MediaType_Json)
.GetAsDataSet();
try
//Do something
finally
vDataSet.Free;
end;
ASYNC REQUESTS
//Implement OnAsyncRequestProcess event to allow cancelling a request or update the UI
RestClient.OnAsyncRequestProcess :=
procedure(var Cancel: Boolean)
begin
Cancel := True; // Set cancel to true to abort the request
end;
// This will raise an EAbort if the request is canceled
RestClient.Resource(CONTEXT_PATH + 'async')
.Accept('text/plain')
.Async
.GET();
NOTE: Async request is only supported for WinHTTP. Any thought about how to implement this feature for Indy and WinInet are welcome.
Authentication
RestClient supports HTTP Basic authentication. You can set credentials using the SetCredentials method before making the first request:
RestClient.SetCredentials('username', 'password');
You can set it once and it will be used for every request.
Self-signed certificates
To skip certificate validation set VerifyCert to false.
RestClient.VerifyCert := false;
Indy note: Certificate validation is not yet supported with Indy. Certificates will not be validated! Any thought about how to implement this feature for Indy are welcome.
Error events
Retry modes
hrmRaise (default)
Raises an exception after the event.
hrmIgnore
Ignore the error. No exception will be raised after the event.
hrmRetry
Retries the request.
THTTPErrorEvent
Triggered for all status codes equal or above 400.
The following example will ignore the status code 404. This will result in an empty response (nil for objects). You'll have to check if your objects has been assigned after every request.
AHTTPError.ErrorMessage contains the content of the response. You can deserialize this to display your own error message (see RestJsonUtils.TJsonUtil).
restclient := TRestClient.Create(self);
restclient.ConnectionType := hctWinINet;
restclient.OnError := RestError;
procedure Tdm.RestError(ARestClient: TRestClient; AResource: restclient.TResource;
AMethod: TRequestMethod; AHTTPError: EHTTPError;
var ARetryMode: THTTPRetryMode);
begin
ARetryMode := hrmRaise;
if AHTTPError.ErrorCode = 404 then
ARetryMode := hrmIgnore;
end;
THTTPConnectionLostEvent
The following example will retry the request forever. If you want it to only retry for at limited time, you'll have to implement that counter your self.
restclient := TRestClient.Create(self);
restclient.ConnectionType := hctWinINet;
restclient.OnConnectionLost := RestConnectionLost;
procedure Tdm.RestConnectionLost(AException: Exception; var ARetryMode: THTTPRetryMode);
begin
ARetryMode := hrmRetry;
sleep(1000);
end;
Java Rest Server
The java project is only for test purpose and has built using Maven and Jersey, so it's needed have installed the JRE 6+ (Java Runtime Environment) and Maven 2 to build and run the application. The Maven bin directory must be included in Windows Path environment variable.
After install Java and Maven just run 'start-java-server.bat' to start the application and 'stop-java-server.bat' to shut down them.
When 'start-java-server.bat' is first run maven dependencies will be downloaded, and it may take a while.
A Delphi REST client API to consume REST services written in any programming language.
The API was tested in Delphi 7, XE, XE2, XE3, XE4 and XE7. It is also compatible with Mac OSX and iOS.
Connection Layer
There are a IHttpConnection interface to abstract the real Http conection. This interface currently have two implementations, using Indy 10, WinHTTP and WinInet.
Indy 9 does not handles HTTP response codes correctly, then if you are using Delphi 7, you must update your indy library to version 10 or use WinHttp (recommended). To disable indy support comment the compiler directive {.$DEFINE USE_INDY} in DelphiRest.inc file.
Serialization/Desserialization
The objects are transmitted in JSON format. To function properly, the object must be declared as follows, with public fields.
TPerson = class(TObject)
public
(* Reflect the server side object field names, for Java must be case-sensitive *)
id: Integer;
name: String;
email: String;
(* Static constructor *)
class function NewFrom(Id: Integer; Name, EMail: String): TPerson;
end;
See more details about serialization here: Serialization
Samples
Note that all code below assume you have installed the component in your IDE and dropped the RestClient component on a form or data module, but of course you can also create the component directly in your code.
GET
var
vList : TList<TPerson>;
begin
vList := RestClient.Resource('http://localhost:8080/java-rest-server/rest/persons')
.Accept(RestUtils.MediaType_Json)
.Get<TList<TPerson>>();
GET ONE
var
vPerson : TPerson;
begin
vPerson := RestClient.Resource('http://localhost:8080/java-rest-server/rest/person/1')
.Accept(RestUtils.MediaType_Json)
.Get<TPerson>();
POST
var
vPerson : TPerson;
begin
vPerson := TPerson.NewFrom(123, 'Fabricio', 'fabricio.colombo.mva@gmail.com');
RestClient.Resource('http://localhost:8080/java-rest-server/rest/person')
.Accept(RestUtils.MediaType_Json)
.ContentType(RestUtils.MediaType_Json)
.Post<TPerson>(vPerson);
PUT
var
vPerson : TPerson;
begin
vPerson := //Load person
vPerson.Email := 'new@email.com';
RestClient.Resource('http://localhost:8080/java-rest-server/rest/person')
.Accept(RestUtils.MediaType_Json)
.ContentType(RestUtils.MediaType_Json)
.Put<TPerson>(vPerson);
DELETE
var
vPerson : TPerson;
begin
vPerson := //Load person
RestClient.Resource('http://localhost:8080/java-rest-server/rest/person')
.Accept(RestUtils.MediaType_Json)
.ContentType(RestUtils.MediaType_Json)
.Delete(vPerson);
GET AS DATASET
The fields need be predefined.
var
vDataSet: TClientDataSet;
begin
vDataSet := TClientDataSet.Create(nil);
try
TDataSetUtils.CreateField(vDataSet, ftInteger, 'id');
TDataSetUtils.CreateField(vDataSet, ftString, 'name', 100);
TDataSetUtils.CreateField(vDataSet, ftString, 'email', 100);
vDataSet.CreateDataSet;
RestClient.Resource(CONTEXT_PATH + 'persons')
.Accept(RestUtils.MediaType_Json)
.GetAsDataSet(vDataSet);
finally
vDataSet.Free;
end;
GET AS DYNAMIC DATASET
The fields are created dynamically according to the returned content.
var
vDataSet: TDataSet;
begin
vDataSet := RestClient.Resource(CONTEXT_PATH + 'persons')
.Accept(RestUtils.MediaType_Json)
.GetAsDataSet();
try
//Do something
finally
vDataSet.Free;
end;
ASYNC REQUESTS
//Implement OnAsyncRequestProcess event to allow cancelling a request or update the UI
RestClient.OnAsyncRequestProcess :=
procedure(var Cancel: Boolean)
begin
Cancel := True; // Set cancel to true to abort the request
end;
// This will raise an EAbort if the request is canceled
RestClient.Resource(CONTEXT_PATH + 'async')
.Accept('text/plain')
.Async
.GET();
NOTE: Async request is only supported for WinHTTP. Any thought about how to implement this feature for Indy and WinInet are welcome.
Authentication
RestClient supports HTTP Basic authentication. You can set credentials using the SetCredentials method before making the first request:
RestClient.SetCredentials('username', 'password');
You can set it once and it will be used for every request.
Self-signed certificates
To skip certificate validation set VerifyCert to false.
RestClient.VerifyCert := false;
Indy note: Certificate validation is not yet supported with Indy. Certificates will not be validated! Any thought about how to implement this feature for Indy are welcome.
Error events
Retry modes
hrmRaise (default)
Raises an exception after the event.
hrmIgnore
Ignore the error. No exception will be raised after the event.
hrmRetry
Retries the request.
THTTPErrorEvent
Triggered for all status codes equal or above 400.
The following example will ignore the status code 404. This will result in an empty response (nil for objects). You'll have to check if your objects has been assigned after every request.
AHTTPError.ErrorMessage contains the content of the response. You can deserialize this to display your own error message (see RestJsonUtils.TJsonUtil).
restclient := TRestClient.Create(self);
restclient.ConnectionType := hctWinINet;
restclient.OnError := RestError;
procedure Tdm.RestError(ARestClient: TRestClient; AResource: restclient.TResource;
AMethod: TRequestMethod; AHTTPError: EHTTPError;
var ARetryMode: THTTPRetryMode);
begin
ARetryMode := hrmRaise;
if AHTTPError.ErrorCode = 404 then
ARetryMode := hrmIgnore;
end;
THTTPConnectionLostEvent
The following example will retry the request forever. If you want it to only retry for at limited time, you'll have to implement that counter your self.
restclient := TRestClient.Create(self);
restclient.ConnectionType := hctWinINet;
restclient.OnConnectionLost := RestConnectionLost;
procedure Tdm.RestConnectionLost(AException: Exception; var ARetryMode: THTTPRetryMode);
begin
ARetryMode := hrmRetry;
sleep(1000);
end;
Java Rest Server
The java project is only for test purpose and has built using Maven and Jersey, so it's needed have installed the JRE 6+ (Java Runtime Environment) and Maven 2 to build and run the application. The Maven bin directory must be included in Windows Path environment variable.
After install Java and Maven just run 'start-java-server.bat' to start the application and 'stop-java-server.bat' to shut down them.
When 'start-java-server.bat' is first run maven dependencies will be downloaded, and it may take a while.
↧
ERP and Restaurante Soruce Code
↧
↧
FireBird (2.5, 3.0) + FireDac Russian
↧
Smart LED Animator Full Source
SLED is a piece of software for creating animation for Smart LEDs (RGB Pixels). It can be used to quickly create animations for Horizontal (LEDTrix), Vertical (MegaTrees), Circular (Arches), and Radial (Spinners) orientations. It will export the animations in Light-O-Rama S3, Vixen, and LightShow Pro formats to be incorporated into your shows.
↧
EhLib 9.0 Build 9.0.028 XE10.1

↧
Digital Media Controller Component
PHP Code:
TUpnpDMC is a class that implements a DLNA DMC (Digital Media Controller) in Delphi.
I needed some Delphi code to play Videos from my server to my SAMSUNG TV.
I could only find some partial implementation, one in Visual Basic and some code in Delphi,
bur not a complete DMC, so I wrote this.
There is an example application in the directory UPNPDelphi.
On second thought, I should heva named the class TDLNADMC and the same for the example.
For now, I am just sharing this code.
You can browse the available servers and renderers on your system.
Once found, you can select an item from the server and play it on a renderer.
Then you can pause, stop, play, seek that item
You create a TUpnpDMC object by calling _create_,
supplying an owner and a TStrings (not NIL) used as Log
You can search devices by _SearchDevices_
Set _OnDeviceListChanged_ to receive notifaction on Devices available
Then retrieve Servers and Renderers by inpecting _ServerCount_ and _GetServerName_ etc.
Select a Server with _SetServerIndex_, the same for a Renderer
Browse the Server tree with _BrowseRoot_ and subdirectories with _BrowseIndex_,
go back with _Back_
Inspect items with _GetItemName_ and _ItemCount_
Select an item with _SetItemIndex_
Now you can Play, Pause, Seek, SetPosition etc the item with the corresponding methods.
You can retrieve information bij GetPosition and GetPlayStatus
[lock]Download [url=https://github.com/RuudErmers/DelphiDLNADMC/archive/master.zip]HERE[/url][/lock]
↧
↧
Android to PC USB Interfaces (ADB, AOA, HID)
PHP Code:
This is a set of code to aid development for communication between an Android device and
an Embedded Device, or PC. There are examples for the following:
Communication between PC and Android device, over USB, using the ADB (Android Debug) protocol.
Communication between PC and Android device, over USB, using the AOA (Android Open Accessory) protocol.
Communication between PC and a simple HID device (Arduino and LPC 1768 Microcontroller).
All PC code is written in Delphi.
Android code is in Java and the embedded code in C/C++.
So why would you want this?
We are developing a hardware device which needs to interact with an Android phone.
It needs to be robust and simple, so we opted for a USB interface.
(Wireless connections were ruled out)
In this case the Android device is the USB client, and the hardware device is USB Host.
In development it became clear that it would be handy to change the hardware device for a PC,
to test the Android side of things without to much hassle on the hardware device.
Therefor we needed an Android <-> PC bridge.
I found a few (in C), but I opted to use Delphi for quick testing.
Based on LibUSBK there is a class which implements a simple twoway USB connection.
From there, there are classes which implement the ADB protocol and the AOA protocol.
As you may know the ADB interface runs on devices supporting Android 1.5. AOA is only supported
by some devices, and need Android 2.3.3.
Personally, I don't see any advantage of using AOA as it is not widely supported. In fact,
I was only able to get this working with one Android Device i have (a chines Android TV Stick)
All of this code becomes 'obsolete' when using an Android device which adds HID facility.
This is supported from Android 4.0. Since all the basics wre there I decide to add an example where
Delphi takes over the Android side to test the hardware.
I have added two examples on Embedded platforms, for Arduino and LPC 1768 (from mBed).
I have also some examples for FEZ Domino or Microchip Cereboth (both implementing ADB host).
On the HID facility: This is also only implemented in some devices.
[lock]Download [url=https://github.com/RuudErmers/AndroidDelphiInterface/archive/master.zip]HERE[/url][/lock]
↧
TMS FlexCel Manuals
TMS FlexCel Manuals, especially
- API Developers Guide
- Reports Designers Guide
- Reports developers Guide
- Using FlexCel with Lazarus
- API Developers Guide
- Reports Designers Guide
- Reports developers Guide
- Using FlexCel with Lazarus
↧
XtremeDocumentStudio Ultimate.v.16.6.638.1890 D2010-XE10.1
Gnostice XtremeDocumentStudio Delphi is the next-generation multi-format document-processing component suite for Delphi/C++Builder developers. XtremeDocumentStudio includes VCL components for viewing, printing, and converting PDF, DOCX, DOC, RTF, BMP, JPEG, PNG, WMF, EMF, and single-page and multi-page TIFF. It also has report-export components for ACE Reporter, FastReport, QuickReport and ReportBuilder components that can export to PDF, PDF/A, XLSX, RTF, HTML, XHTML, TXT, SVG, PNG, JPEG and GIF formats. PDF/A support includes compliance with PDF/A 1b, 2b, and 3b versions. PDF/A-3b support complies with ZUGFeRD electronic invoicing standard. In future, creation and editing support will be added.
XtremeDocumentStudio also includes FireMonkey support. Its FireMonkey document viewer can display PDF, DOC, RTF and images on Windows, Mac, iOS and Android platforms. The FireMonkey support is currently in beta and we are continually improving the rendering with support for more and more features of each of the formats.
XtremeDocumentStudio Delphi is written in 100% Object Pascal for both VCL and FireMonkey. It can process all supported formats without requiring external software such as Microsoft Word, Open XML SDK, Adobe PDF library or GhostScript.
Supports Delphi 2010 to Delphi XE10.1(Berlin)
XtremeDocumentStudio also includes FireMonkey support. Its FireMonkey document viewer can display PDF, DOC, RTF and images on Windows, Mac, iOS and Android platforms. The FireMonkey support is currently in beta and we are continually improving the rendering with support for more and more features of each of the formats.
XtremeDocumentStudio Delphi is written in 100% Object Pascal for both VCL and FireMonkey. It can process all supported formats without requiring external software such as Microsoft Word, Open XML SDK, Adobe PDF library or GhostScript.
Supports Delphi 2010 to Delphi XE10.1(Berlin)
↧
Fill bitmap area with 2-color gradient, any angle - Source using Graphics32
Hi all,
I recently had to develop a little method for filling an area of bitmap with a 2-color gradient of any angle.
I use the Graphics32 library, and didn't want to have to integrate and learn another library for that. I quickly searched for an existing solution online, and didn't find one, so I wrote my own. I'm posting it here in case it helps someone.
The way I went about it is as follows:
The way I approached it is:
Cheers!
uses
GR32, GR32_Transforms;
///<summary>Advanced Gradient Fill function, with any angle and any start/end point combinations for the gradient<br/>
/// Lets you specify the area of the bitmap in which to draw the gradient (aRect)<br/>
/// Lets you specify the start and end points (with repect to the drawing area aRect) of the gradient (sPoint, ePoint)<br/>
/// Lets you specify the start and end colors of the gradient (sColor, eColor)<br/>
/// Lets you specify a mask for the gradient (maskBitmap). The gradient will only be drawn to parts of the mask that are not fully transparent (levels of transparency are not applied however)</summary>
procedure GradientFillAdv (aBitmap : TBitmap32; aRect : TRect; sColor, eColor : TColor32; sPoint, ePoint : TPoint; maskBitmap : TBitmap32 = nil);
procedure GradientFillAdv (aBitmap : TBitmap32; aRect : TRect; sColor, eColor : TColor32; sPoint, ePoint : TPoint; maskBitmap : TBitmap32 = nil);
var
startPoint, endPoint : TPoint; //Used to make the calculations easier, always use the smallest-X point as the start point
startColor, endColor : TColor32;
newO : TPoint; //origin in the new reference coordinate system
alpha : Double; //Rotation angle of the new reference coordinate system, in radians
sinAlpha, cosAlpha : Double; //the sinus and cosinus values of the rotation angle, used many times so precalculated
GradColors: TArrayOfColor32; //Array of colors corresponding to the X axis value on the new ref. coord. system. This value is shifted by caOffset since arrays are 0-based
caOffset, minRectX, maxRectX, spX, epX, xDist : Integer;
loop, loopX, loopY: Integer; //used to determine the size of the color array to create
scR, scG, scB, scA, ecR, ecG, ecB, ecA : Byte; //color components of the start and end colors
{ Mask Vars }
scaleFactor : Double;
tarRect : TRect;
tempMask : TBitmap32;
pAlpha : Byte;
{ Functions for coordinates under the translated and rotated system:
After Translation: X2t = X - newO.X
Y2t = Y - newO.Y
After Rotation: X2tr = X2t.cos(alpha) - Y2t.sin(alpha)
Y2tr = Y2t.cos(alpha) + X2t.sin(alpha) }
function GetNewX (oldX, oldY : Integer) : Integer;
begin
Result := Round ((oldX - newO.X) * cosAlpha - (oldY - newO.Y) * sinAlpha);
end;
{ Not needed
function GetNewY (oldX, oldY : Integer) : Integer;
begin
Result := Round ((oldY - newO.Y) * cosAlpha + (oldX - newO.X) * sinAlpha);
end; }
{ For speed, assumes spX < pX < epX. Otherwise, just add Mins and Maxs or check for position }
function CombineColors (pX : Integer) : TColor32;
var
dist2Start, dist2End : Integer;
begin
dist2Start := pX - spX;
dist2End := epX - pX;
Result := Color32((scR * dist2End + ecR * dist2Start) div xDist, (scG * dist2End + ecG * dist2Start) div xDist, (scB * dist2End + ecB * dist2Start) div xDist, (scA * dist2End + ecA * dist2Start) div xDist);
end;
begin
{ For a simple 2-color gradient, we only need to find the X coordinate of each point in a new reference system that has been (potentially) translated and (potentially) rotated.
The new reference coordinate system is determined by the start and end points of the gradient. }
if sPoint.X <= ePoint.X then
begin
startPoint := sPoint;
endPoint := ePoint;
startColor := sColor;
endColor := eColor;
end else
begin
startPoint := ePoint;
endPoint := sPoint;
startColor := eColor;
endColor := sColor;
end;
newO := Gr32.Point (Round ((startPoint.X + endPoint.X) / 2.0), Round ((startPoint.Y + endPoint.Y) / 2.0));
alpha := -ArcTan ((endPoint.Y - startPoint.Y) / (endPoint.X - startPoint.X));
sinAlpha := Sin (alpha);
cosAlpha := Cos (alpha);
Color32ToRGBA(startColor, scR, scG, scB, scA);
Color32ToRGBA(endColor, ecR, ecG, ecB, ecA);
{ We will fill the tempBitmap with colors.
The color of each pixel is governed by its X position in the new reference coordinate system (Y coordinate would only be used if we had a multi-point, non-linear gradient) }
if startPoint.Y <= endPoint.Y then
begin
minRectX := GetNewX(0, 0);
maxRectX := GetNewX(GetRectWidth(aRect) - 1, GetRectHeight(aRect) - 1);
end else
begin
minRectX := GetNewX(0, GetRectHeight(aRect) - 1);
maxRectX := GetNewX(GetRectWidth(aRect) - 1, 0);
end;
SetLength (GradColors, maxRectX - minRectX + 1);
{ Fill the array with the corresponding color for each position }
spX := GetNewX(startPoint.X, startPoint.Y); //X value in the new ref. coord. system of the starting point
epX := GetNewX(endPoint.X, endPoint.Y); //X value in the new ref. coord. system of the ending point
xDist := epX - spX;
for loop := minRectX to maxRectX do
begin
if loop <= spX then
GradColors[loop - minRectX] := startColor
else if loop >= epX then
GradColors[loop - minRectX] := endColor
else
GradColors[loop - minRectX] := CombineColors(loop);
end;
{ Prepare the mask, if required. }
if Assigned(maskBitmap) then
begin
tempMask := TBitmap32.Create;
if (maskBitmap.Height <> GetRectHeight(aRect)) or (maskBitmap.Width <> GetRectWidth(aRect)) then
begin
scaleFactor := Max(maskBitmap.Height / GetRectHeight(aRect), maskBitmap.Width / GetRectWidth(aRect));
tarRect := Rect(0, 0, Floor(maskBitmap.Width / scaleFactor), Floor(maskBitmap.Height / scaleFactor));
maskBitmap.ResamplerClassName := 'TLinearResampler';
maskBitmap.DrawTo(tempMask, tarRect);
end else
tempMask.Assign(maskBitmap);
end;
{ Now, fill the aRect area }
for loopX := Max(0, aRect.Left) to Min(aBitmap.Width, aRect.Right - 1) do
begin
for loopY := Max(0, aRect.Top) to Min(aBitmap.Height, aRect.Bottom - 1) do
begin
if Assigned(maskBitmap) then
begin
pAlpha := AlphaComponent (tempMask. Pixel [loopX, loopY]);
if pAlpha <> 0 then
aBitmap. Pixel [loopx, loopY] := GradColors[GetNewX(loopX - aRect.Left, loopY - aRect.Top) - minRectX];
end else
aBitmap.Pixel[loopX, loopY] := GradColors[GetNewX(loopX - aRect.Left, loopY - aRect.Top) - minRectX];
end;
end;
end;
I recently had to develop a little method for filling an area of bitmap with a 2-color gradient of any angle.
I use the Graphics32 library, and didn't want to have to integrate and learn another library for that. I quickly searched for an existing solution online, and didn't find one, so I wrote my own. I'm posting it here in case it helps someone.
The way I went about it is as follows:
- a 2-color gradient is essentially defined by a line.
- On that line, any point up to the start is of the start color.
- In between the start and end point, the color is the weighted average of the 2 colors (I don't know if my way of blending the colors is the generally accepted one, or if there is even such a thing. It works well for me though)
- from the end point on, the color is the end color.
- The area of the bitmap is filled by finding the corresponding "X" position of each pixel relative to the provided gradient line
The way I approached it is:
- The gradient is specified by its start and end points (relative to the overal bitmap)
- The origin of the "gradient coordinate system" is halfway between the start and end points
- We pre-calculate the individual pixel values along the X-axis for the gradient coord. system
- The target area is then filled according to the X-value of the pixel in the gradient coord. system. that value is calculated by apply the rotation and translation transforms required.
- The target area is defined by a TRect
- I used a mask to further delimit the area of the bitmap that needs to be filled. The mask is white for the area that is to be filled, black for the rest. The provided mask is stretched to match the target rect.
Cheers!
uses
GR32, GR32_Transforms;
///<summary>Advanced Gradient Fill function, with any angle and any start/end point combinations for the gradient<br/>
/// Lets you specify the area of the bitmap in which to draw the gradient (aRect)<br/>
/// Lets you specify the start and end points (with repect to the drawing area aRect) of the gradient (sPoint, ePoint)<br/>
/// Lets you specify the start and end colors of the gradient (sColor, eColor)<br/>
/// Lets you specify a mask for the gradient (maskBitmap). The gradient will only be drawn to parts of the mask that are not fully transparent (levels of transparency are not applied however)</summary>
procedure GradientFillAdv (aBitmap : TBitmap32; aRect : TRect; sColor, eColor : TColor32; sPoint, ePoint : TPoint; maskBitmap : TBitmap32 = nil);
procedure GradientFillAdv (aBitmap : TBitmap32; aRect : TRect; sColor, eColor : TColor32; sPoint, ePoint : TPoint; maskBitmap : TBitmap32 = nil);
var
startPoint, endPoint : TPoint; //Used to make the calculations easier, always use the smallest-X point as the start point
startColor, endColor : TColor32;
newO : TPoint; //origin in the new reference coordinate system
alpha : Double; //Rotation angle of the new reference coordinate system, in radians
sinAlpha, cosAlpha : Double; //the sinus and cosinus values of the rotation angle, used many times so precalculated
GradColors: TArrayOfColor32; //Array of colors corresponding to the X axis value on the new ref. coord. system. This value is shifted by caOffset since arrays are 0-based
caOffset, minRectX, maxRectX, spX, epX, xDist : Integer;
loop, loopX, loopY: Integer; //used to determine the size of the color array to create
scR, scG, scB, scA, ecR, ecG, ecB, ecA : Byte; //color components of the start and end colors
{ Mask Vars }
scaleFactor : Double;
tarRect : TRect;
tempMask : TBitmap32;
pAlpha : Byte;
{ Functions for coordinates under the translated and rotated system:
After Translation: X2t = X - newO.X
Y2t = Y - newO.Y
After Rotation: X2tr = X2t.cos(alpha) - Y2t.sin(alpha)
Y2tr = Y2t.cos(alpha) + X2t.sin(alpha) }
function GetNewX (oldX, oldY : Integer) : Integer;
begin
Result := Round ((oldX - newO.X) * cosAlpha - (oldY - newO.Y) * sinAlpha);
end;
{ Not needed
function GetNewY (oldX, oldY : Integer) : Integer;
begin
Result := Round ((oldY - newO.Y) * cosAlpha + (oldX - newO.X) * sinAlpha);
end; }
{ For speed, assumes spX < pX < epX. Otherwise, just add Mins and Maxs or check for position }
function CombineColors (pX : Integer) : TColor32;
var
dist2Start, dist2End : Integer;
begin
dist2Start := pX - spX;
dist2End := epX - pX;
Result := Color32((scR * dist2End + ecR * dist2Start) div xDist, (scG * dist2End + ecG * dist2Start) div xDist, (scB * dist2End + ecB * dist2Start) div xDist, (scA * dist2End + ecA * dist2Start) div xDist);
end;
begin
{ For a simple 2-color gradient, we only need to find the X coordinate of each point in a new reference system that has been (potentially) translated and (potentially) rotated.
The new reference coordinate system is determined by the start and end points of the gradient. }
if sPoint.X <= ePoint.X then
begin
startPoint := sPoint;
endPoint := ePoint;
startColor := sColor;
endColor := eColor;
end else
begin
startPoint := ePoint;
endPoint := sPoint;
startColor := eColor;
endColor := sColor;
end;
newO := Gr32.Point (Round ((startPoint.X + endPoint.X) / 2.0), Round ((startPoint.Y + endPoint.Y) / 2.0));
alpha := -ArcTan ((endPoint.Y - startPoint.Y) / (endPoint.X - startPoint.X));
sinAlpha := Sin (alpha);
cosAlpha := Cos (alpha);
Color32ToRGBA(startColor, scR, scG, scB, scA);
Color32ToRGBA(endColor, ecR, ecG, ecB, ecA);
{ We will fill the tempBitmap with colors.
The color of each pixel is governed by its X position in the new reference coordinate system (Y coordinate would only be used if we had a multi-point, non-linear gradient) }
if startPoint.Y <= endPoint.Y then
begin
minRectX := GetNewX(0, 0);
maxRectX := GetNewX(GetRectWidth(aRect) - 1, GetRectHeight(aRect) - 1);
end else
begin
minRectX := GetNewX(0, GetRectHeight(aRect) - 1);
maxRectX := GetNewX(GetRectWidth(aRect) - 1, 0);
end;
SetLength (GradColors, maxRectX - minRectX + 1);
{ Fill the array with the corresponding color for each position }
spX := GetNewX(startPoint.X, startPoint.Y); //X value in the new ref. coord. system of the starting point
epX := GetNewX(endPoint.X, endPoint.Y); //X value in the new ref. coord. system of the ending point
xDist := epX - spX;
for loop := minRectX to maxRectX do
begin
if loop <= spX then
GradColors[loop - minRectX] := startColor
else if loop >= epX then
GradColors[loop - minRectX] := endColor
else
GradColors[loop - minRectX] := CombineColors(loop);
end;
{ Prepare the mask, if required. }
if Assigned(maskBitmap) then
begin
tempMask := TBitmap32.Create;
if (maskBitmap.Height <> GetRectHeight(aRect)) or (maskBitmap.Width <> GetRectWidth(aRect)) then
begin
scaleFactor := Max(maskBitmap.Height / GetRectHeight(aRect), maskBitmap.Width / GetRectWidth(aRect));
tarRect := Rect(0, 0, Floor(maskBitmap.Width / scaleFactor), Floor(maskBitmap.Height / scaleFactor));
maskBitmap.ResamplerClassName := 'TLinearResampler';
maskBitmap.DrawTo(tempMask, tarRect);
end else
tempMask.Assign(maskBitmap);
end;
{ Now, fill the aRect area }
for loopX := Max(0, aRect.Left) to Min(aBitmap.Width, aRect.Right - 1) do
begin
for loopY := Max(0, aRect.Top) to Min(aBitmap.Height, aRect.Bottom - 1) do
begin
if Assigned(maskBitmap) then
begin
pAlpha := AlphaComponent (tempMask. Pixel [loopX, loopY]);
if pAlpha <> 0 then
aBitmap. Pixel [loopx, loopY] := GradColors[GetNewX(loopX - aRect.Left, loopY - aRect.Top) - minRectX];
end else
aBitmap.Pixel[loopX, loopY] := GradColors[GetNewX(loopX - aRect.Left, loopY - aRect.Top) - minRectX];
end;
end;
end;
↧
↧
FastReport 5.3.16
↧
Intraweb Bootstrap 3 Framework for Delphi
This framework let you create responsive desktop and mobile applications with IntraWeb using Tweeter Bootstrap 3 library.Using the ide in the same way you use for create traditional Intraweb Aplications, with very little effort you can create a single applications that look awsome in mobile devices and desktop at the same time.It's light and fast so it provides a great experience for the final user on practically any modern device.If you need to develop applications for phones, tablets and any other device this is the best alternative for use with Intraweb for Delphi.
↧
AlphaControls.v11.17.Stable.(D5&D10.1Berlin - CB6&Builder10.1Berlin) OnlyDCU
13.10.2016 AlphaControls v11.17 Stable released
* Improved initializing of the TsDecimalSpinEdit when the DecimalPlaces property is changed
* Improved drawing of the TsImage if Transparent property is False
* Improved showing of popup forms by the ShowPopupForm procedure
* Improved scaling of TsSpeedButton and TsButton when dropdown arrow is visible
* Improved painting of the TsCombobox component without skins
* Switching of the ScaleMode property is improved visually
* Solved issue with drawing of a selected item with big text in the TsTreeView component
* Solved problem with scrolling of the TsSkinSelector component by keyboard
* Solved issue with empty form showing when ExtendedBorders used
* Solved problem with hotkeys when TsComboboxEx is focused
* Added support of the TSearchBox component
* Added semitransparent painting of the disabled TsSlider components and caption of the TsGroupBox component
* Improved initializing of the TsDecimalSpinEdit when the DecimalPlaces property is changed
* Improved drawing of the TsImage if Transparent property is False
* Improved showing of popup forms by the ShowPopupForm procedure
* Improved scaling of TsSpeedButton and TsButton when dropdown arrow is visible
* Improved painting of the TsCombobox component without skins
* Switching of the ScaleMode property is improved visually
* Solved issue with drawing of a selected item with big text in the TsTreeView component
* Solved problem with scrolling of the TsSkinSelector component by keyboard
* Solved issue with empty form showing when ExtendedBorders used
* Solved problem with hotkeys when TsComboboxEx is focused
* Added support of the TSearchBox component
* Added semitransparent painting of the disabled TsSlider components and caption of the TsGroupBox component
↧