2021年12月3日 星期五

Delphi 2010 DataSnap

 DSServerClass component TDSLifeCycle OnCreateInstance

Delphi DataSnap Lifecycle TDSServerClass DSTCPServerTransport

 https://docwiki.embarcadero.com/RADStudio/Sydney/en/Server_Class_LifeCycle

Using DAC products in multi-tier DB application development

https://blog.devart.com/using-dac-products-in-multi-tier-db-application-development.html 

Registering DataSnap Server Class in runtime with Delphi

Delphi 2010 DataSnap

Preserving State in DataSnap REST Server - 大匠之風

Server Objects Life Cycle 

https://www.delphipower.xyz/handbook_2009/server_objects_life_cycle.html

https://www.delphipower.xyz/handbook_2010/overview_of_datasnap_in_delphi.html


http://www.4k8k.xyz/article/aroc_lo/5333773

 DataSnap 2009 系列_编程资料收集与共享交流-程序员资料 


delphi  string  function  constructor  服务器  数据库类  DELPHI编程  parameters  三层/多层结构  编程技术 

Design Patterns Design Classes Objects

 Facade Pattern Decorator Composite Abstract Factory

抽象工廠 Abstract Factory

構造器 Builder Pattern

工廠方法 Factory Method pattern

原型 Prototype pattern

單例模式 Singleton pattern

Prototype Pattern 原型模式

Singleton Pattern 單例模式

Abstract Factory Pattern 抽象工廠模式

 

 

https://www.weblio.jp/content/Abstract+Factory+%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

Abstract Factory パターン

 

Spread Delphi, Built with Delphi Good Quality Applications Built With Delphi 3rd vcl component

 https://delphi.fandom.com/wiki/Good_Quality_Applications_Built_With_Delphi

Good Quality Applications Built With Delphi

 

delphi-libraries-list List of Delphi Libraries and Frameworks

 

delphi-libraries-list

 

https://opensourcelibs.com/lib/delphi-libraries-list


    Spring4D repo: https://bitbucket.org/sglienke/spring4d
        Nick Hodges Talk: Dependency Injection and the Delphi Spring Framework : http://www.youtube.com/watch?v=8iB_ppvpjxM
    Emballo (not currently maintained) repo: https://code.google.com/p/emballo/
    Good Readings http://blog.synopse.info/post/2012/10/14/Interfaces-in-practice%3A-dependency-injection%2C-stubs-and-mocks
        http://delphisorcery.blogspot.ch/2013/12/dependency-injection-best-practices.html
    simple duck typing to Delphi Objects (easy RTTI) : http://code.google.com/p/duckduckdelphi/
    JSONChimera (XE2) web site: http://arcana.sivv.com/chimera
        SuperObject web site: http://code.google.com/p/superobject/
            documentation: http://superobject.googlecode.com/git/readme.html
        JSON parsing in mORMot : http://blog.synopse.info/post/2011/06/02/Fast-JSON-parsing
    DB <-> Object mapping -tiOPF: http://tiopf.sourceforge.net/index.shtml
    DUnitX: https://github.com/VSoftTechnologies/DUnitX
        Article: http://www.finalbuilder.com/Resources/Blogs/PostId/697/introducing-dunitx.aspx
    Dunit: http://dunit.sourceforge.net/
    DelphiSpec: https://github.com/RomanYankovsky/DelphiSpec
        Unit testing - see http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi
        Stubs and Mocks - see http://blog.synopse.info/post/2012/10/14/Stubs-and-Mocks-for-Delphi-with-mORMot
    Delphi-Mocks repo: https://github.com/VSoftTechnologies/Delphi-Mocks
        Delphi-Mocks Article
            http://delphisorcery.blogspot.fr/2011/09/pimp-your-unit-tests-using-mock-objects.html
            http://www.finalbuilder.com/Resources/Blogs/PostId/417/introducing-delphi-mocks.aspx
    Code coverage repo : http://code.google.com/p/delphi-code-coverage/
        article : http://thundaxsoftware.blogspot.ch/2013/02/using-delphi-code-coverage.html
        Jenkins / Hudson integration : http://christerblog.wordpress.com/2010/07/02/delphi-code-coverage-in-hudson/
    GUI Testing http://www.gearheadforhire.com/articles/ruby/win32-autogui/using-ruby-to-drive-windows-applications  OpenCTF: http://openctf.sourceforge.net/
    Jenkins / Hudson integration : http://christerblog.wordpress.com/2010/04/25/using-hudson-to-build-delphi-projects/
    TPMath (scientific library): http://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm
    ZeroMQ Delphi bindings https://github.com/bvarga/delphizmq
    Indy (Internet protocol components): http://www.indyproject.org/index.en.aspx
    mORMot, n-Tier / Client-Server
        http://blog.synopse.info/post/2012/03/07/Interface-based-services
        http://blog.synopse.info/post/2010/07/18/DataSnap-like-Client-Server-JSON-RESTful-Services-in-Delphi-7-2010
    Embeddable browser Delphi Chromium Embedded 3: http://code.google.com/p/dcef3/
        Delphi Chromium Embedded: http://code.google.com/p/delphichromiumembedded/
    Web frameworks Delphi On Rails https://code.google.com/p/delphionrails/
        delphi MVC framework : https://code.google.com/p/delphimvcframework/
        xxm: http://xxm.sourceforge.net/
    Http server http://blog.synopse.info/post/2011/03/11/HTTP-server-using-fast-http.sys-kernel-mode-server
    Delphi-ORM: https://code.google.com/p/delphi-orm/
    mORMot: http://synopse.info/fossil/wiki?name=SQLite3+Framework
    ZeosLib (database components): http://sourceforge.net/projects/zeoslib/
    SQLite wrapper: https://github.com/stijnsanders/TSQLite
    MongoDB connector: https://github.com/stijnsanders/TMongoWire
    Report from code - see http://blog.synopse.info/post/2010/06/30/Making-report-from-code
    PDF export - see http://blog.synopse.info/category/Open-Source-Projects/Synopse-PDF-engine
    OmniThread Library: http://code.google.com/p/omnithreadlibrary/
    SapMM: https://code.google.com/p/sapmm/
    LeakCheck: https://bitbucket.org/shadow_cs/delphi-leakcheck/ multi-platform memory manager with leak checking and DUnit integration.
    FastMM: https://github.com/pleriche/FastMM4
 
    ReduxDelphi, predictable state container : https://github.com/pierrejean-coudert/ReduxDelphi
    DSharp
        repo: https://bitbucket.org/sglienke/dsharp
        web site: http://delphisorcery.blogspot.fr/
    DWScript: http://code.google.com/p/dwscript/
    Python-4-Delphi: http://code.google.com/p/python4delphi/
    Delphi Javascript: http://code.google.com/p/delphi-javascript/
    ECMAScript 5 + JIT (SpiderMonkey) / Pascal integration: http://blog.synopse.info/post/2014/04/07/JavaScript-support-in-mORMot-via-SpiderMonkey
    BESEN, ECMAScript 5 in Object Pascal: https://github.com/bero1985/besen
    Lua bindings: https://github.com/cxflag203/delphimvcframework/tree/master/lib/luadelphibinding
    Very Simple Lua https://github.com/Dennis1000/verysimplelua
    RemObjects PascalScript: https://github.com/remobjects/pascalscript
    Behavior3 for Delphi https://github.com/Dennis1000/behavior3delphi
    http://www.boyet.com/FixedArticles/EZDSL.html
    The Delphi Container Library: http://sourceforge.net/projects/dclx/
    TChromeTabs: http://code.google.com/p/delphi-chrome-tabs/
    SynEdit: http://synedit.sourceforge.net/
    virtual-treeview: https://code.google.com/p/virtual-treeview/
    Task Dialogs: http://blog.synopse.info/post/2011/03/05/Open-Source-SynTaskDialog-unit-for-XP%2CVista%2CSeven
    vcl-styles-utils: Extend the Delphi VCL Styles (XE2+), http://code.google.com/p/vcl-styles-utils/
    Free ErrorSoft Vcl Components: https://github.com/errorcalc/FreeEsVCLComponents
    OpenGL, GLScene: http://glscene.sourceforge.net
    Computer Vision: OpenCV bindings :https://github.com/Laex/Delphi-OpenCV
    GDI+ : http://sourceforge.net/projects/delphigdiplus/
    Graphics32: http://graphics32.org/wiki/
    DSPack (Direct Show): http://code.google.com/p/dspack/
    7Zip bindings: http://code.google.com/p/d7zip/
    Castalia Delphi Parser: https://github.com/jacobthurman/Castalia-Delphi-Parser
    GpDelphiUnits: http://code.google.com/p/gpdelphiunits/
    libgit2: https://github.com/libgit2/libgit2
        Sampling Profiler: http://www.delphitools.info/samplingprofiler/
        source code instrumenting profiler : http://code.google.com/p/gpprofile2011/
        Spider - Delphi profiler: https://github.com/yavfast/dbg-spider
    ObjectDebugger : run-time Object Inspector for Delphi VCL applications https://github.com/marcocantu/ObjectDebugger
    Delphi IDE Theme Editor: https://code.google.com/p/delphi-ide-theme-editor/
    Delphi Dev. Shell Tools: http://code.google.com/p/delphi-dev-shell-tools/
    OmniPascal VS Code Editor: http://www.omnipascal.com/
    Delphi Find Unit (Import uses): https://github.com/rfrezino/RFindUnit
 

MyThread = Class(TThread)

 https://wiert.me/2020/01/01/delphi-multi-threading-confused-by-tthread-synchronize-tthread-queue-youre-not-alone/

 delphi TThread Synchronization OnExecute TMutexAcquire TCriticalSection TMutex TSpinlock TMonitor

Type
 MyThread = Class(TThread)
  private
    …
  protected
    ...
 end;


----------
procedure TMyThread.DoProgress;
////
procedure TMyThread.Execute;
const
Interval = 1000000;
begin
FreeOnTerminate := True;
FProgressBar.Max := FCountTo div Interval;
FProgressBar.Step := FProgressBar.Max;
while FCounter < FCountTo do
begin
if FCounter mod Interval = 0 then Synchronize(DoProgress) ;


----------
Type
 MyThread = Class(TThread)
  private
   procedure doProgress;
  end;
 
Implementation
 
procedure doProgress;
begin
  Form1.ProgressBar1.Progress;
end;

----------
var
 T : MyThread;
begin
 T := MyThread.Create(True);
 T.FreeOnTerminate := True;
 T.Resume;
end;
----------
type
 MyThread = Class(TThread)
  private
   ...  
  protected
   procedure Execute; override;
  end;
 
var
 
implementation
 
procedure MyThread.Execute;
begin
 
end;
----------
procedure MyThread.Execute;
begin
 Synchronize(doProgress);
end;

----------
MyThread.Suspend;
...
MyThread.Resume;


----------

var
 isSuspended : Boolean;
begin
 isSuspended := MyThread.Suspended;
end;
----------
var
 MyThreadID : Cardinal;
begin
 MyThreadID := MyThread.ThreadID;
end;
----------
MyThread.Terminate;
----------
procedure MyThread.Execute;
begin
 Synchronize(doProgress);
 …
 MyThread.Terminate;
 Exit;
end;

procedure MyThread.Execute;
begin
 if MyThread.Terminated then
    Exit;
 …
 if MyThread.Terminated then
    Exit;
 …
 MyThread.Terminate;
 Exit;
end;

procedure MyThread.Execute;
begin
 if MyThread.Terminated then
    Exit;
 …
 if MyThread.Terminated then
    Exit;
 …
 MyThread.Terminate;
 MyThread.WaiteFor;
 Exit;
end;


----------
{ Important: Methods and properties of objects in VCL or CLX can only be used
  in a method called using Synchronize, for example,
 
      Synchronize(UpdateCaption);
 
  and UpdateCaption could look like,
 
    procedure myTred.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }
---------------

const
  TM_MYTHREAD_MSG = WM_USER + 200;
  TM_MYTHREAD_START = TM_MYTHREAD_MSG + 1;
  TM_MYTHREAD_PROGRESS = TM_MYTHREAD_MSG +2;
  TM_MYTHREAD_DONE =  TM_MYTHREAD_MSG +3;
/////
PostMessage(FormHandle, TM_MYTHREAD_MSG, TM_MYTHREAD_START,0);
//////
TMyForm = class(TForm)
...
protected
  procedure TmMyThreadMsg(var Msg: TMessage); message TM_MYTHREAD_MSG;
...
end;
 
////////
 
 procedure TMyForm.TmMyThreadMsg(var Msg: TMessage);
begin
  case Msg.LParam of
    TM_MYTHREAD_START : Progressbar1.Position := 0;
    TM_MYTHREAD_PROGRESS : Progressbar1.Position := Progressbar1.Position + 1;
    TM_MYTHREAD_DONE : Progressbar1.Position := Progressbar1.Max;
  end;
end;

---------------
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
  end;
  Type
 MyThread = Class(TThread)
  private
  protected
   procedure Execute; override;
 end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
////
procedure MyThread.Execute;
begin
form1.Caption:=form1.Caption+'1';
end;
////
procedure TForm1.FormCreate(Sender: TObject);
var
 T : MyThread;
begin
 T := MyThread.Create(True);
 T.FreeOnTerminate := true;
 T.Resume;
end;
end.
---------------
 

Messagebox delay in Delphi MessageBoxTimeOut function

 Messagebox delay in Delphi MessageBoxTimeOut function
 
#include <windows.h>
#include <tchar.h>

//Functions & other definitions required-->
typedef int (__stdcall *MSGBOXAAPI)(IN HWND hWnd,
        IN LPCSTR lpText, IN LPCSTR lpCaption,
        IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
typedef int (__stdcall *MSGBOXWAPI)(IN HWND hWnd,
        IN LPCWSTR lpText, IN LPCWSTR lpCaption,
        IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);

int MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText,
    IN LPCSTR lpCaption, IN UINT uType,
    IN WORD wLanguageId, IN DWORD dwMilliseconds);
int MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpText,
    IN LPCWSTR lpCaption, IN UINT uType,
    IN WORD wLanguageId, IN DWORD dwMilliseconds);

#define MB_TIMEDOUT 32000

    static MSGBOXAAPI MsgBoxTOA = NULL;

    if (!MsgBoxTOA)
    {
        HMODULE hUser32 = GetModuleHandle(_T("user32.dll"));
        if (hUser32)
        {
            MsgBoxTOA = (MSGBOXAAPI)GetProcAddress(hUser32,
                                      "MessageBoxTimeoutA");
        HMODULE hUser32 = GetModuleHandle(_T("user32.dll"));
        if (hUser32)
        {
            MsgBoxTOW = (MSGBOXWAPI)GetProcAddress(hUser32,
                                      "MessageBoxTimeoutW");
HMODULE hUser32 = LoadLibrary(_T("user32.dll"));
 
    UINT uiFlags = MB_OK|MB_SETFOREGROUND|MB_SYSTEMMODAL|MB_ICONINFORMATION;
    
    iRet = MessageBoxTimeout(NULL, _T("Test a timeout of 2 seconds."),
                      _T("MessageBoxTimeout Test"), uiFlags, 0, 2000);
    //iRet will = 1

    uiFlags = MB_YESNO|MB_SETFOREGROUND|MB_SYSTEMMODAL|MB_ICONINFORMATION;

    iRet = MessageBoxTimeout(NULL, _T("Test a timeout of 5 seconds."),
                      _T("MessageBoxTimeout Test"), uiFlags, 0, 5000);
    //iRet will = MB_TIMEDOUT if no buttons pressed, button values otherwise
        
    //only unload user32.dll when you have no further need
    //for the MessageBoxTimeout function
    FreeLibrary(hUser32);
https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.messageboxflags?view=visualstudiosdk-2022

MB_OK
MB_OKCANCEL
MB_ABORTRETRYIGNORE
MB_YESNOCANCEL
MB_YESNO
MB_RETRYCANCEL

MB_APPLMODAL
MB_SYSTEMMODAL

        MB_SIMPLEBEEP (Only when Title is not used)
        MB_HELP (Probably won't work)
        MB_DEFAULT_DESKTOP_ONLY
        MB_RIGHT
        MB_RTLREADING
        MB_SETFOREGROUND
        MB_TOPMOST
        MB_SERVICE_NOTIFICATION
    https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-messagebox
    https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-messagebeep

MB_TASKMODAL

------------------------------
function MessageBoxTimeOut(hWnd: HWND; lpText: PChar; lpCaption: PChar;
                           uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall;

function MessageBoxTimeOutA(hWnd: HWND; lpText: PChar; lpCaption: PChar;
                            uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall;


function MessageBoxTimeOutW(hWnd: HWND; lpText: PWideChar; lpCaption: PWideChar;
                            uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall;

  Windows.pas
const
  MB_TIMEDOUT = 32000;

function MessageBoxTimeOut; externaluser32 name 'MessageBoxTimeoutA';
function MessageBoxTimeOutA; external user32 name 'MessageBoxTimeoutA';
function MessageBoxTimeOutW; external user32 name 'MessageBoxTimeoutW';
  // Define a MessagBox  with an OK button and a timeout of 2 seconds
  iFlags  := MB_OK or MB_SETFOREGROUND or MB_SYSTEMMODAL or MB_ICONINFORMATION;
  iResult := MessageBoxTimeout(Application.Handle, 'Test a timeout of 2 seconds.',
                             'MessageBoxTimeout Test', iFlags, 0, 2000);
  // iResult will = 1 (IDOK)
  ShowMessage(IntToStr(iRet));

  // Define a MessageBox with a Yes and No button and a timeout of 5 seconds
  iFlags  := MB_YESNO or MB_SETFOREGROUND or MB_SYSTEMMODAL or MB_ICONINFORMATION;
  iResult := MessageBoxTimeout(Application.Handle, 'Test a timeout of 5 seconds.',
                              'MessageBoxTimeout Test', iFlags, 0, 5000);
  // iResult = MB_TIMEDOUT if no buttons clicked, otherwise
  // iResult will return the value of the button clicked
  case iResult of
  IDYES:  // Pressed Yes button
    ShowMessage('Yes');
  IDNO:  // Pressed the No button
    ShowMessage('No');
  MB_TIMEDOUT: // MessageBox timed out
    ShowMessage('TimedOut'); 


https://edn.embarcadero.com/print/32736

 Dialogs createMessageDialog createOptionDialog

Vcl.Dialogs.CreateMessageDialog

https://github.com/Leandros/WindowsHModular/blob/master/include/win32/window.h 


https://www.codeproject.com/Articles/18399/Localizing-System-MessageBox

2021年12月1日 星期三

Direct3D Shader

 https://github.com/grijjy/DelphiScalableClientSockets

 https://github.com/grijjy

 Introduction to Shader Programming

https://blog.grijjy.com/2021/01/14/shader-programming/

 . To compile DirectX shaders, you need to use the Direct3D Shader Compiler tool (fxc.exe), 

https://github.com/grijjy/JustAddCode/tree/master/GpuProgramming

https://blog.grijjy.com/

2021年11月30日 星期二

Animated 3D Models 3d file obj fbx dae stp prt stl WRL blend

 Animated 3D Models 3d file obj fbx dae stp prt stl WRL blend

3D File Format: 10 Most Popular Types for Different Software


https://cgifurniture.com/3d-file-format-10-types/


http://edutechwiki.unige.ch/en/3D_file_format


Essential Guide to 3D File Formats


https://www.marxentlabs.com/3d-file-formats/


https://all3dp.com/1/best-20-3d-animation-software/

Model file formats - Unity - Manual 

https://docs.unity3d.com/Manual/3D-formats.html

Netty is a non-blocking I/O client-server framework for the development of Java network applications

socket cache server layer Socket Server listen thread extends  ServerSocket

Socket listen accept connect identifier

Multiple Connection

inetd (internet service daemon) is a super-server daemon on many Unix systems that provides Internet services. For each configured service
https://en.wikipedia.org/wiki/Inetd
TCP Wrappers (also known as tcp_wrappers) is a host-based networking ACL system, used to filter network access to Internet Protocol servers
https://en.wikipedia.org/wiki/TCP_Wrappers
xinetd (Extended Internet Service Daemon) is an open-source super-server daemon which runs on many Unix-like systems and manages Internet-based connectivity
https://en.wikipedia.org/wiki/Xinetd

iptables是運行在使用者空間的應用軟體,通過控制Linux核心netfilter模組
https://en.wikipedia.org/wiki/Iptables
iptables is a command-line firewall utility
ipchains  firewall

Syslog Daemons, Message Formats and Protocols
syslog daemon is a server process that provides a message logging

getpeername() — Get the name of the peer connected to a socket
WSAASyncSelect getpeername getsockname
asynchronous Socket listen accept client connect identifier getpeername getsockname

ServerSocket" Compressing RMI Wrapper SSL
Remote Method Invocation java.rmi.server Interface RMIServerSocketFactory  Java Remote Messaging Protocol

Netty is a non-blocking I/O client-server framework for the development of Java network applications

 https://en.wikipedia.org/wiki/Netty_(software)

 

 

 

 

 

 

 

 

2021年11月26日 星期五

mechanical algorithm skeletal linkage detected simulator collision

https://en.wikipedia.org/wiki/Linkage_(mechanical)

ECMAScript and WebAssembly, JavaScript WebAssembly SIMD Chrome OpenCV.js

https://v8.dev/

 V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linux systems that use x64, IA-32, ARM, or MIPS processors. V8 can run standalone, or can be embedded into any C++ application.

 

https://github.com/WebAssembly/simd/tree/master/proposals/simd

JavaScript programs from within a Delphi app

 JSKit https://github.com/eugenekryukov/jskit

Evaluate JavaScript programs from within a Delphi app, and support JavaScript scripting of your Delphi app. JavaScriptCore based framework.

 

3rd-Party Development Guide

https://www.crossvcl.com/tlist.html

Castle Game Engine - Coming to Delphi!

 castle-engine https://castle-engine.io/wp/

Castle Game Engine from DelphiCon

 https://github.com/castle-engine/castle-engine

https://delphicon.embarcadero.com/talks/castle-game-engine-coming-to-delphi/ 


https://wiki.lazarus.freepascal.org/Choosing_a_Game_Engine

http://www.zgameeditor.org/

https://www.pascalgamedevelopment.com/content.php

http://www.clootie.ru/

https://delphigl.com/

https://sourceforge.net/projects/andorra/

https://castle-engine.io/

http://zengl.org/

https://asphyre.net/

https://en.wikipedia.org/wiki/GLScene

------

https://en.wikipedia.org/wiki/Graphics32

Image32 - A 2D graphics library for Delphi

Clipper 6.4.0 - NuGet

LazRGBGraphics http://wiki.freepascal.org/LazRGBGraphics
BGRABitmap http://wiki.freepascal.org/BGRABitmap
AggPas http://www.crossgl.com/aggpas/
fpVectorial http://wiki.freepascal.org/fpvectorial
Andorra 2D http://andorra.sourceforge.net/
Graphics32 http://graphics32.org

http://allegro-pas.sourceforge.net/

https://imaginglib.sourceforge.io/

http://www.efg2.com/

Skia4Delphi

AntiAliasing graphics library roundup for Delphi

https://githubhelp.com/topic/delphi-library

https://torry.net/pages.php?s=72

https://awesomeopensource.com/projects/object-pascal

http://www.felix-colibri.com/papers/graphic/delphi_3d_designer/delphi_3d_designer.html

https://giters.com/topics/delphi-library

https://gitplanet.com/language/delphi

 Python for Delphi (P4D)


animation spriters resource Game Engines

 https://instabug.com/
https://wiki.gdevelop.io/gdevelop5/tutorials/resources
  animation spriters resource  https://www.spriters-resource.com/
Animated Sprite QML Type SpriteSequence

Game Engines

Unreal Engine
Unity
Godot Engine
CryEngine Crytek CryEngine 3.8.1
Amazon Lumberyard
AppGameKit AppGameKit Classic
Cocos2d-x Pyglet pygame SDL Simple DirectMedia Layer Lib
MonoGame C#  .NET Foundation.
ShiVa Engine  Web Player (browser plugin) available
HeroEngine
Godot Engine - Free and open source 2D and 3D game engine
Pyxel Edit https://pyxeledit.com/
Qubicle https://www.minddesk.com/
ProBuilder https://unity.com/features/probuilder
Adobe Animate
-----
Ogre3d https://www.ogre3d.org/
Power VR Ray Tracing PowerVR SDK and Tools including ray tracing
Torque 3D http://www.garagegames.com/products/torque-3d
 
Game Graphics Tools
Spine http://zh.esotericsoftware.com/


*** Aseprite - Animated sprite editor & pixel art tool
https://www.aseprite.org/
Beast Autodesk Gameware
https://en.wikipedia.org/wiki/Autodesk_Gameware

3D
Adobe Substance 3D Designer
Maya LT
Yebis
Enlighten
SpeedTree for Games
Umbra
Modo
OGRE3D

TOOLS
Aseprite image editor
Spine 2D skeletal animation http://zh.esotericsoftware.com/ Dragonbones http://dragonbones.com
Enlighten real-time, physic-based lighting
SpeedTree create textures for 3D objects
Substance Designer
Umbra 3D rendering Umbra (3D technology company)
CrazyBump source texture
STG.Seamless Texture Generator Normals Bump Maps Occlusion Specular
TexturePacker TexturePacker - Create Sprite Sheets for your game!

Yebis  https://www.siliconstudio.co.jp/middleware/yebis/jp/
--------
Gravit Designer
Krita
ArtRage
Vectr
game graphics tools  animation
----------------------------------------------------------------------

Game Audio Tools
Wwise
FMOD
Fabric
Spatial Workstation (3DCeption)
Miles Sound System
Nuendo
Bfxr https://www.bfxr.net/
DAW (Digital Audio Workstation) Tools
Adobe Audition
KOMPLETE https://www.native-instruments.com/en/products/komplete/
Audacity https://www.audacityteam.org/
Cubase https://www.steinberg.net/cubase/
REAPER https://www.reaper.fm
GarageBand https://www.apple.com/lae/mac/garageband/
SONAR https://www.cakewalk.com/products/SONAR/
Pro Tools https://www.avid.com/pro-tools
----------------------------------------------------------------------
https://hub.packtpub.com/10-best-graphics-and-rendering-tools-game-developers/

https://wiki.freepascal.org/Choosing_a_Game_Engine

11 tools to get you started making video games
----------------------------------------------------------------------

delphi Direct3D 9 Material HLSL 反射

 https://github.com/LUXOPHIA/MyAsset

 System.Types, System.Classes, System.Math.Vectors,

FMX.Types3D, FMX.Controls3D, FMX.MaterialSources,

 

MyModelMyMaterial の統合プロジェクト。

独自のシェーダをHLSLで記述することにより、フレネル反射による鏡面反射/屈折の表現と、法線マッピングによる凸凹表現を実現。RGB毎に異なる屈折率を設定することで、簡易な分散表現に対応できる他、屈折率を大きくすることで光の透過しない金属の質感も表現できる。

 

 https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/Materials/HowTo/Refraction/

  屈折率 すなわち IOR (Index of Refraction) は、光学単位であり、光がある媒質から別の媒質に伝搬するときにどの程度曲がるかを正確に表します。 この光の現象は測定可能であるため、こうした光学単位

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2021年11月25日 星期四

delphi啟動外部程式執行結束 啟動外部程式 Winexec ShellExecute

 delphi啟動外部程式執行結束 啟動外部程式 Winexec ShellExecute 

Winapi.ShellAPI Winapi.Windows

 ShellExecute CreateProcess  ShellExecuteEx WaitForSingleObject

delphi shellexecuteex SW_SHOWNORMAL

 TShellExecuteInfo  

 WaitForSingleObject(ShExecInfo.hProcess,INFINITE); 

GetExitCodeProcess(ExecInfo.hProcess,ExitCode);

 createprocessasuser 

https://www.codeproject.com/Articles/19165/Vista-UAC-The-Definitive-Guide

Link_Create()
Link_CreateAsUser()
Link_CreateWithLogon()
Link_CreateWithToken()
Link_Destroy()
Link_CreateProcessA()
Link_CreateProcessW()
Link_ShellExecuteExA()
Link_ShellExecuteExW()
Link_ShellExecuteA()
Link_ShellExecuteW()
Link_LoadLibraryA()
Link_LoadLibraryW()
Link_SendData()
Link_GetData()
Link_SendFinalize()

CreateProcessElevatedA()
CreateProcessElevatedW()
CreateProcessAsUserElevatedA()
CreateProcessAsUserElevatedW()
CreateProcessWithLogonElevatedW()
CreateProcessWithTokenElevatedW()
SH_RegCreateKeyExElevatedA()
SH_RegCreateKeyExElevatedW()
SH_RegOpenKeyExElevatedA()
SH_RegOpenKeyExElevatedW()
SH_RegCloseKeyElevated()
ShellExecuteElevatedA()
ShellExecuteElevatedW()
ShellExecuteExElevatedA()
ShellExecuteExElevatedW()

Requesting Administrative Rights Requested Elevation Levels Elevation 

https://www.codeproject.com/Questions/182599/How-to-Run-a-Process-As-Admin

https://stackoverflow.com/questions/11586139/how-to-run-application-which-requires-admin-rights-from-one-that-doesnt-have-th

restful json datasnap scalable multi-tier frameworks delphi

  NetHTTP TNetHTTPClient  TNetHTTPRequest
 REST TRESTClient TRESTRequest TRESTResponse TRESTResponseDataSetAdapter
 Indy IdHTTP IdSSLOpenSSL
 JavaScript jQuery(Mobile Http DOM Ajax JavaScript RESTful REST web service API  
 DataSnap REST server HTML5 client
 
 REST Services TRESTClient TRESTRequest TRESTResponse components
 System.DateUtils,System.SyncObjs, System.Math,
 System. Generics.Collections,
 System.Rtti, System.Bindings.Outputs,
 System.JSON,
 System.JSON.Builders, System.JSON.Readers,
  FMX.Types, FMX.Forms, FMX.Dialogs, FMX.Layouts,
  FMX.Objects, FMX.ListBox, FMX.Ani, FMX.Gestures, FMX.StdCtrls,
  FMX.DateTimeCtrls, FMX.Graphics,
  FMX.Media, FMX.ScrollBox, FMX.Memo, FMX.Calendar, FMX.Edit,
  FMX.Controls, FMX.Controls.Presentation,
  FMX.TreeView, FMX.TabControl,
 
  REST.Utils,
  REST.Types,
  REST.Client,
  REST.Response.Adapter,
  REST.Authenticator.Simple,
  REST.Authenticator.Basic,
  REST.Authenticator.OAuth, IPPeerClient, Data.Bind.Components;

https://www.embarcadero.com/cn/free-tools/rest-debugger/free-download




2021年11月21日 星期日

Streaming restoring components DFM panel stream savetofile delphi

https://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TReader

InsertComponent RegisterClasses ObjectTextToBinary 

ReadComponent WriteComponent 

VclRtl

ReadComponentRes  
WriteComponentRes  

    TFileStream  – 處理文件。
    TStringStream - 內存中的字符串操作。
    TMemoryStream - 使用內存緩衝區。
    TWinSocketStream - 通過套接字連接讀取和寫入。
    TOleStream - 使用 COM 接口進行讀寫。
TBufferedFileStream
TMemoryStream 是一種在動態內存中存儲數據的流。
TWinSocketStream 是一個流,它為應用程序提供讀寫套接字連接的服務。
TOleStream 通過 OLE 對象提供的流接口來讀寫信息。TActiveXControl


System.BlockWrite - RAD Studio API Documentation
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Structured_Types_(Delphi)
Standard Routines and Input-Output
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Standard_Routines_and_Input-Output

System.TTextRec
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.TTextRec

System.SysUtils.TSearchRec
Using the Eof and Bof Properties
System.TFileRec - RAD Studio API Documentation

System.Net.Mime.TMultipartFormData Form data encoded as a MIME multipart message following the HTML 4 standard.
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_an_HTTP_Client
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.Net.Mime.TMultipartFormData

delphi ObjectTextToBinary ComponentToString
ObjectBinaryToText ObjectTextToBinary ObjectResourceToText ObjectTextToResource ReadResHeader
ComponentToString (Delphi) - RAD Studio Code Examples
System.Classes.ObjectTextToBinary - Embarcadero DocWiki
TObjectTextEncoding


var  
  m : TMemoryStream;  
  f : TFileStream;  
  begin  
  f := TFileStream.Create('c:\testdfm.abnt',fmOpenRead);  
  m := TMemoryStream.Create;  
  try  
    ObjectTextToBinary(f,m);  
    m.Position := 0;  
    dxRibbon1.Free;  
    form2.DestroyComponents;  
    m.ReadComponent(self);  
    dxRecalculateNonClientPart(Handle);  
  finally  
    m.Free;  
    f.Free;  
  end;  
end; 
    BinStream:TMemoryStream;

    StrStream: TStringStream;
 
    BinStream := TMemoryStream.Create;

      StrStream := TStringStream.Create(s);
        BinStream.WriteComponent(組件);

        BinStream.Seek(0, soFromBeginning);

        ObjectBinaryToText(BinStream, StrStream);

        StrStream.Seek(0, soFromBeginning);

        結果:= StrStream.DataString;

        StrStream.Free;
      BinStream.Free

  function StringToComponentProc(Value: string): TComponent;

    StrStream: TStringStream;

    BinStream:TMemoryStream;

    StrStream := TStringStream.Create(Value);

      BinStream := TMemoryStream.Create;

        ObjectTextToBinary(StrStream, BinStream);

        BinStream.Seek(0, soFromBeginning);

        結果:= BinStream.ReadComponent(nil);

    Memo1.Text:= ComponentToStringProc(ScrollBar1);

    ScrollBar1.Free;

    ScrollBar1:= (StringToComponentProc(Memo1.Text) as TMyScrollBar);

    ScrollBar1.Parent:= Form1;

    ScrollBar1.Visible:= TRUE;
 
  程序 TForm1.FormCreate(Sender: TObject);

    ScrollBar1:= TMyScrollBar.Create(Form1);

    ScrollBar1.Parent:= Form1;

    ScrollBar1.Visible:= TRUE;

    ScrollBar1.Top:= 48;

    ScrollBar1.Left:= 250;

    ScrollBar1.Name:= 'Ricksbar';
 

  https://flylib.com/books/en/2.37.1/core_library_classes.html

ClientDataSet BLOB Binary Large Object TBlobField

 ClientDataSet  BLOB Binary Large Object   TBlobField

uses IOUtils, MMSystem;

  MediaPath, Path: string;

  with ClientDataSet1 do begin

    FieldDefs.Add('WavFileName', ftString, 32);

    FieldDefs.Add('WAV', ftBlob);

    CreateDataSet;
 
  MediaPath := GetEnvironmentVariable('SystemRoot') + '\Media\';

  for Path in TDirectory.GetFiles(MediaPath, '*.wav') do

    ClientDataSet1.Append;

    ClientDataSet1['WavFileName'] := ExtractFileName(Path);

    TBlobField(ClientDataSet1.FieldByName('WAV')).LoadFromFile(Path);

  ClientDataSet1.MergeChangeLog;
 
  BlobStream: TClientBlobStream;

  BlobField: TBlobField;

  BlobField := ClientDataSet1.FieldByName('WAV') as TBlobField;

  BlobStream := TClientBlobStream.Create(BlobField, bmRead);

  Win32Check(PlaySound(BlobStream.Memory, 0, SND_SYNC or SND_MEMORY));

  BlobStream.Free;

 

    01.DataSetProvider.Options.poPropogateChanges:=True;  
    02.procedure TForm1.DataSetProvider1AfterUpdateRecord(Sender: TObject;  
    03.SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;  
    04.UpdateKind: TUpdateKind);  
    05.begin  
    06.//DstId TADODataset  
     07.//FId self-growth fields  
    08.if   UpdateKind=ukInsert then  
    09.    begin  
    10.       DstId.CommandText:='select @@Identity as FId ';  
    11.       DstId.Open;  
    12.       DeltaDS.FieldByName('FId').ReadOnly:=False;  
    13.       DeltaDS.FieldByName('FId').NewValue:=DstId.FieldByName('FId').AsInteger ;  
    14.       DstId.Close;  
    15.   end;  
    16.end;  
01.procedure TProducts.DataSetProvider1BeforeUpdateRecord(Sender: TObject;  
02.SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;  
03.UpdateKind: TUpdateKind; var Applied: Boolean);  
04.begin  
05.//DstProduct from the table Name  
 06.//CategoryID from the associated field of the table for the word from the segment by a primary table  
 07.// qryIdentity is TADOQuery qryIdentity.SQL: = 'select @@ identity'  
08.if (UpdateKind = ukInsert) and  
09.(SourceDS = DstProduct) and  
10.(DeltaDS.FieldByName('CategoryID').Value = Unassigned)   ) then  
11.begin  
12.    if DeltaDS.BOF then  
13.    begin  
14.      qryIdentity.Close;  
15.      qryIdentity.Open;  
16.    end;  
17.    DeltaDS.FieldByName('CategoryID').NewValue := qryIdentity.Fields[0].Value;  
18.end;  
19.end;