顯示具有 delphi 標籤的文章。 顯示所有文章
顯示具有 delphi 標籤的文章。 顯示所有文章

2023年12月19日 星期二

Quartex Pascal, an exciting Object Pascal development toolchain for writing modern, HTML5 and node.js powered applications. delphi sim

 Quartex Pascal, an exciting Object Pascal development toolchain for writing modern, HTML5 and node.js powered applications.

https://www.educational-computing.com/QuartexPascal.html
https://jonlennartaasenden.wordpress.com/tag/quartex-pascal/
https://quartexdeveloper.com/

https://android.googlesource.com/platform/external/llvm/+/f3ef533/lib/Object/MachOObjectFile.cpp

https://www.twblogs.net/a/5e52c2abbd9eee211681b977
Getting into Node.js from Delphi - 台部落
Delphi is one of the best development toolchains for Windows. I have been an avid fan of Delphi since it was first released, and before that – Turbo Pascal too. Delphi has a healthy following – and despite popular belief, Delphi scores quite well on the Tiobe Index.

https://learndelphi.org/what-you-should-know-about-quartex-pascal-and-how-it-makes-rad-work-for-javascript/

QTX Framework for Delphi and FPC is available on BitBucket QTX Framework for Delphi and FPC is available on BitBucket. The QTX Framework is a large and mature framework that is presently being organized ...

2023年12月16日 星期六

Interactive geometry software The Geometer's Sketchpad Geometer Sketch pad math vector mathematics physics Geometry

 https://en.wikipedia.org/wiki/Category:Interactive_geometry_software
https://en.wikipedia.org/wiki/GeoGebra
https://en.wikipedia.org/wiki/The_Geometer%27s_Sketchpad
https://en.wikipedia.org/wiki/Category:Graphics_libraries

https://github.com/jslee02/awesome-graphics-libraries

https://knilt.arcc.albany.edu/Unit_1:_What_is_Geometer%27s_SketchPad%3F
https://www.3delite.hu/TGraphDisplay3D/
http://www.partow.net/projects/fastgeo/

https://wiki.freepascal.org/Lazarus_Documentation

Validating and testing a project delivery success model in construction: a mixed-method approach in Australia | Emerald Insight

http://www.felix-colibri.com/papers/graphic/delphi_3d_designer/delphi_3d_designer.html
https://stackoverflow.com/questions/15584170/draw-sphere-on-timage-control-of-delphi
https://delphiscience.wordpress.com/tag/3d/

Open CASCADE Technology (OCCT)
https://en.wikipedia.org/wiki/Open_Cascade_Technology
https://openscad.org/
https://en.wikipedia.org/wiki/List_of_3D_graphics_libraries


2022年6月21日 星期二

Quartex Pascal – Research and development for the next generation object pascal

 Quartex Pascal – Research and development for the next generation object pascal

Welcome to the official website for Quartex Pascal, an exciting Object Pascal development toolchain for writing modern, HTML5 and node.js powered applications.

Quartex Pascal (short: QTX) is an object pascal IDE, compiler, run-time library and development system. Unlike traditional, native development systems, such as C/C++, Delphi or Freepascal, QTX generates high performance JavaScript – allowing developers to tap into web technology and enjoy the full might of modern mobile, desktop and server development.

 https://jonlennartaasenden.wordpress.com/2021/10/05/quartex-pascal-nearing-completion/

https://quartexpascal.wordpress.com/ 

https://jonlennartaasenden.wordpress.com/category/quartex-pascal/

2018年4月16日 星期一

byte 2 bin byte array

var
  a: byte;
  MASK: byte;
  arr : Array[0..7] of byte;
  iindex : byte;
begin
  a:= random($ff);
  MASK := ($80-1);// ($1 shl (sizeof(a)*7) )-1
  //writeln(MASK);
  write('a= ');
  write(a);
  write('= ');
  write(a div 16 );
  write(',');
  write(a mod 16 );
  writeLn('');

//msb 1 byte  to 8byte
  for iindex := 7 downto 0 do
  begin
    if a > MASK then arr[iindex]:=1 else arr[iindex]:=0;
    a:= a shl 1;
    write(arr[iindex]);
  end;
  //writeLn('-----------');
 

2015年12月12日 星期六

跨平台 pascal 免費 編譯 開發 環境 (window Qt X 基礎) codetyphon lazarus delphi similar delphi development environment

http://www.pilotlogic.com/sitejoom/index.php
(window Qt X 基礎) codetyphon lazarus delphi similar delphi development environment

CodeTyphon ver 5.50
At 18-Sep-2015 we released a new version 5.50 of our 
Free, Pascal Visual Programming Studio

CodeTyphon.
for Cross-Platform Native Development, with Multi-OS, Multi-CPU and Cross-Build abilities.

For all changes please read Changes log file


http://www.pascalscada.comAbout PascalSCADA

The PascalSCADA is: a framework for Delphi/Lazarus to quick development of HMI/SCADA applications.

Platforms supported by PascalSCADA:

Windows, 32 bits and 64 bits
Linux, 32 bits and 64 bits
FreeBSD, 32 bits and 64 bits (64 bits needs FPC 2.4.4+)
Windows CE (needs FPC 2.6.0+)
What you can do with PascalSCADA? Exchange data with PLC's, create interfaces, store values and alarms of process and control users of the application.


Lazarus
Open Source |  | Mac, Windows, Linux, Windows Mobile, BSD, Self-Hosted, OpenSolaris
Lazarus is a cross-platform IDE for the Free Pascal compiler. It tries to offer a Delphi-like programming...
  Development     programming, ide, rapid-application-development, delphi, pascal

KDevelop
Open Source |  | Mac, Linux, BSD, KDE
KDevelop is a free, open source IDE (Integrated Development Environment) for Linux, Solaris, FreeBSD, Max OS...
  Development     development, developer-tools, programming, ide, python
  
Delphi
Commercial |  | Windows
Embarcadero Delphi, formerly CodeGear Delphi and Borland Delphi, is a software development environment for...
  Development     programming, ide, android-development, ios-development, rapid-application-development
  
Free Pascal
Open Source |  | Mac, Windows, Linux, Windows Mobile, BSD, Haiku
Free Pascal (aka FPK Pascal) is a 32 and 64 bit professional Pascal compiler. It is available for different...
  Development     development, compilers, pascal, pascal-compiler
  
CalcTape
Free |  | Windows
CalcTape is a revolutionary new kind of pocket calculator. With CalcTape, also extensive calculations remain...
  Development, Education & Reference     php-development, mysql, calculator, software-development, perl
  
CodeTyphon
Free |  | Windows, Linux
CodeTyphon is the free "Pascal Visual Programming Studio", for Cross-Platform Native Development...
  Development     programming, ide, rapid-application-development, pascal, lazarus

SQL Server Data Access Components
Free with limited functionality |  | Mac, Windows, Linux, Android, iPhone
SQL Server Data Access Components (SDAC) is a library of components that provides access to Microsoft SQL...
  Development     database, sql, sql-server, delphi, component
  
Turbo Pascal
Free for personal use |  | Windows
Turbo Pascal is a software development system that includes a compiler and an integrated development...
  Development     ide, compilers, debugger, pascal

MSEide + MSEgui
Open Source |  | Windows, Linux
MSEide+MSEgui is new options in the programming world. MSEide+MSEgui is a package  IDE (Integrated...
  Development     ide, rapid-application-development, pascal, free-pascal

MIDletPascal
Open Source |  | Windows
MIDletPascal is an Pascal compiler and IDE specifically designed to create software for mobiles. It generates...
  Development     programming, java, pascal, j2me

codelot
Free |  | Web / Cloud
Codelot is a web service where you can store your own codes or find codes you need. It's intended to be a...
  Development     database, php-development, javascript-development, html, css

Dev-Pascal
Open Source |  | Windows
[DISCONTINUED] Dev-Pascal is a full-featured integrated development environment (IDE), which is able to...
  Development     discontinued, ide, compilers, debugger, pascal


Oxygene (formerly known as Chrome) is a programming language developed by RemObjects Software for Microsoft's Common Language Infrastructure and the Java Platform. Oxygene is Object Pascal-based, but also has influences from C#, Eiffel, Java, F# and other languages.

2015年11月27日 星期五

Kitto 是 資料庫 ADO / DAO ODBC 到 Apache 網路伺服器中間的架構, 經由Fast CGI 掛載 應用程式在網頁伺服器上 他藉由 ExtJS 的JavaScript 介面描述

https://code.google.com/p/kitto/wiki/KittoAtAGlance

Kitto at a glance


Kitto  是 資料庫 ADO / DAO ODBC 到 Apache 網路伺服器中間的架構, 經由Fast CGI 掛載 應用程式在網頁伺服器上
他藉由 ExtJS 的JavaScript 介面描述

Right now, Kitto is only at the beginning of its life, but... 
  • If you fancy about creating a web front-end for that 200-table database you have; 如果你想要網頁軟體 有200個資料頁
  • If you want it with a sophisticated Ajax-powered rich user interface, with features such as search, filtering, grouping, charts, etc.; 你需要商用資料表或是JavaScript的資料過濾
  • If you'd very much like to write your server-side business rules in Delphi; 
  • If you need to do it rapidly; 
  • If you feel like doing it with Open Source tools. 
If some or all of the above conditions are met, then a closer look at Kitto is in order. 

A closer look

Kitto is an engine for creating data-driven web applications. This means that Kitto offers tools to ease the creation of applications that display and allow to manipulate data stored in a database. It is made in Delphi, and it is mainly aimed at Delphi developers not wanting to learn the intricacies of HTML, CSS and Javascript but wanting to get the job done quickly. 
As such, Kitto is not a general-purpose tool for creating web sites. 
A Kitto application is based on a set of text files in yaml format called the Metadata. Metadata contains the mapped database objects (Models), the user interface descriptions (Views and Layouts) and the general configuration parameters such as database connection. A Kitto application may as well contain business rules and controllers (custom user interface elements) written in Delphi. 
Kitto roughly follows the MVC paradigm for data presentation. 
Kitto offers the following features for application development: 
  • Scalable 3-tier architecture. 三層式架構
  • Extensible metadata catalog based on yaml files. 可以外部插入功能
  • Database-agnostic data access. 
  • Modeling of database objects through Models. 模組化資料庫
  • Pluggable authentication mechanisms. 
  • Pluggable access control/user permission management mechanisms. 
  • Modeling of presentation (user interface) elements through Views and Layouts. 可以有 自動描述 使用者介面
  • Pre-defined and pluggable Controllers. 
  • Pervasive, pluggable macros throughout metadata. 插件與巨集
  • Built-in localization for multi-language applications. 可以多國語言
Kitto integrates with other tools to implement some of its features: 
  • ExtJS for the client-side user interface. 
  • ExtPascal for generating the ExtJS code and managing the communication with the web server. 
  • Apache as a web server, and FastCGI as the communication protocol. 
  • dxgettext for localization. 
For more information, please read the Getting started guide, download the source code and the examples, and if you have doubts just ask!

其他

Frameworks (alphabetically)




2015年11月26日 星期四

spring4d spring 就是 java ee 用於 application server 多層式 multi tier軟體架構 時 用於 與終端介面連結的架構, 共能大概是 sql 或資料庫的 偵錯與阻擋非法存取 ,延伸有 資料多型或是 發動命令與操作

spring 就是 java ee 用於 application server 多層式 multi tier軟體架構 時 用於 與終端介面連結的架構, 共能大概是 sql 或資料庫的 偵錯與阻擋非法存取 ,延伸有 資料多型或是 發動命令與操作

spring4d 就是spring for delphi

https://bitbucket.org/sglienke/spring4d

Spring4D is an open-source code library for Embarcadero Delphi 2010 and higher. It consists of a number of different modules that contain a base class library (common types, interface based collection types, reflection extensions) and a dependency injection framework. It uses the Apache License 2.0.
spring4d是開放原始碼 的函式庫, for delphi 2010 或更高(因為他大量使用多型),它包含基礎類庫(常見的類型,接口基於集合類型,反映擴展)和依賴注入框架不同的模塊。它使用Apache許可證2.0。

https://bitbucket.org/sglienke/spring4d/wiki/Home

A set of interface-based Collections 介面架構分類
A powerful IEnumerable interface for accessing those collections 多行泛用
A Dependency Injection Container 深度注入內容
An Encryption Library 編碼函式庫

A Reflection library that extends Delphi's RTTI 執行時期的 資料確認與 外部加入的功能


google spring4d

google spring java

2015年11月2日 星期一

delphi 日文網站

http://mrxray.on.coocan.jp/index.htm

http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=25

http://d.hatena.ne.jp/nomnel/20111125/1322183069

http://www.geocities.jp/asumaroyuumaro/program/tips/gdiplus.html

http://dobon.net/vb/dotnet/graphics/transform.html

delphi 請問Timer如果不用拉元件產生的,該如何寫

type
  TDBThread = class(TThread)
  protected
    procedure PrintMsg;
    procedure Execute; override;
  end;
procedure TDBThread.Execute;
begin
  while Not Terminated do
  begin
    Synchronize(PrintMsg);
    Sleep(1500);
  end;
end;
procedure TDBThread.PrintMsg;
begin
  Form1.Memo1.Lines.Add(TimeToStr(Time) + ': Threading');
end;
procedure TForm1.FormShow(Sender: TObject);
begin
  DBThread := TDBThread.Create(False);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DBThread.Terminate;
  DBThread.WaitFor;
  DBThread.Free;
end;
攪個直執行緒Sleep(1500);就是你要它多久做一次(準一點 )

delphi runtime 取得panel下的可視元件 savetofile

delphi runtime 取得panel下的可視元件

procedure TForm1.AddToTreeView(ATreeNode: TTreeNode; APanel: TPanel);
var
  i: integer;
  TmpTreeNode: TTreeNode;
begin
  for i := 0 to APanel.ControlCount - 1 do
  begin
    TmpTreeNode := TreeView1.Items.AddChild(ATreeNode, APanel.Controls[i].Name);
    if APanel.Controls[i] is TPanel then
     AddToTreeView(TmpTreeNode, TPanel(APanel.Controls[i]))
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  tn, TmpTreeNode: TTreeNode;
begin
  tn := TreeView1.Items.Add(nil, Panel1.Caption);
  for i := 0 to Panel1.ControlCount - 1 do
  begin
    TmpTreeNode := TreeView1.Items.AddChild(tn, Panel1.Controls[i].Name);
    if Panel1.Controls[i] is TPanel then
    begin
     AddToTreeView(TmpTreeNode, TPanel(Panel1.Controls[i]))
    end;
  end;
end; 











function MethodPropToStr: string;
  var
    Value: TMethod;
    Root: TComponent;
  begin
    Value := GetMethodProp(Instance, PropInfo);
    if Value.Code <> nil then
    begin
     if Instance is TForm then
     Root := TComponent(Instance)
     else
     Root := TComponent(Instance).Owner;
     Result := Root.MethodName(Value.Code);
    end else begin
     Result := '';
    end;
  end;

begin
  begin
    PropType := PropInfo^.PropType^;
    case PropType^.Kind of
     tkInteger, tkChar, tkEnumeration, tkSet:
     Result := OrdPropToStr;
     tkFloat:
     Result := FloatPropToStr;
     tkString,tkLString:
     Result := StrPropToStr;
     tkClass:
     Result := ClassPropToStr;
     tkMethod:
     Result := MethodPropToStr;
     else
     Result := 'Unknown';
    end;
  end;
end;

{TObjInfo}
constructor TObjInfo.Create(Instance: TObject);
begin
  HaveInstance:= False;
  if Assigned(Instance) then
  begin
    FInstance:= Instance;
    FName:= Instance.ClassName;
    ListUpProps(Instance);
  end;
end;

destructor TObjInfo.Destroy;
begin
  if HaveInstance then
    FreeMem(FPropList, PropCount * SizeOf(Pointer));

  inherited Destroy;
end;

function TObjInfo.GetItems(Index:Integer):TMyPropInfo;
var
  PropInfo: PPropInfo;
  PropType: PTypeInfo;
  PropName, PropValue: string;
begin
  PropInfo := FPropList^[Index];
  if PropInfo = nil then
  begin
    Raise Exception.Create('Invalid Index');
    Exit;
  end;
  PropName := PropInfo^.Name;
  Result.Name:= PropName;
  PropValue := PropValueToStr(TPersistent(FInstance),PropInfo);
  Result.Value:= PropValue;
  PropType := PropInfo^.PropType^;
  Result.Kind:= PropType^.Kind;
end;

function TObjInfo.IndexOfProp(const S:String):Integer;
var
  i:integer;
  St:TStringList;
begin
  St:=TStringList.Create;
  for i:= 0 to FCount -1 do
    St.Add(Self[i].Name);

  Result:= St.IndexOf(S);
  St.Free;
end;

procedure TObjInfo.ListUpProps(Instance:TObject);
begin
  FCount := GetTypeData(Instance.ClassInfo)^.PropCount;
  if FCount > 0 then
  begin
    GetMem(FPropList, FCount * SizeOf(Pointer));
    HaveInstance:= True;
    try
     GetPropInfos(Instance.ClassInfo, FPropList);
    except
    end;
  end;
end;

end.

unit DsnInfo;

// Runtime Design System Version 2.x June/08/1998
// Copyright(c) 1998 Kazuhiro Sasaki.

interface

uses
  Windows, Messages, SysUtils, Classes, Forms, Controls, Dialogs,
  TypInfo;

type

  TMyPropInfo = record
    Name:String;
    Value:String;
    Kind: TTypeKind;
  end;

  TObjInfo = class
  private
    FInstance:TObject;
    FName: String;
    FCount:Integer;
    FPropList: PPropList;
    HaveInstance:Boolean;
    procedure ListUpProps(Instance:TObject);
    function GetItems(Index:Integer):TMyPropInfo;
  public
    constructor Create(Instance: TObject);
    destructor Destroy; override;
    function IndexOfProp(const S:String):Integer;
    property Name:String read FName;
    property Items[Index:Integer]: TMyPropInfo read GetItems; default;
    property PropCount: Integer read FCount;
  end;

  function PropValueToStr(Instance: TPersistent;
     PropInfo: PPropInfo):string;

implementation

type
  TIntegerSet = set of 0..SizeOf(Integer) * 8 - 1;

function PropValueToStr(Instance: TPersistent;
     PropInfo: PPropInfo):string;
var
  PropType: PTypeInfo;

  function SetPropToStr(Value: Cardinal):string;
  var
    I: Integer;
    BaseType: PTypeInfo;
  begin
    BaseType := GetTypeData(PropType)^.CompType^;
    Result := '[';
    for I := 0 to 15 do
     if I in TIntegerSet(Value) then begin
     if Result <> '[' then
     Result := Result + ',';
     Result := Result + GetEnumName(BaseType, I);
     end;
    Result := Result + ']';
  end;

  function OrdPropToStr:string;
  var
    Value: Longint;
  begin
    Value := GetOrdProp(Instance, PropInfo);
    case PropType^.Kind of
     tkInteger:
     Result := IntToStr(Value);
     tkChar:
     Result := Chr(Value);
     tkSet:
     Result := SetPropToStr(Value);
     tkEnumeration:
     Result := GetEnumName(PropType, Value);
    end;
  end;

  function FloatPropToStr:string;
  var
    Value: Extended;
  begin
    Value := GetFloatProp(Instance, PropInfo);
    Result := FloatToStr(Value);
  end;

  function StrPropToStr:string;
  begin
    Result := GetStrProp(Instance, PropInfo);
  end;

  function ClassPropToStr:string;
  var
    Component: TComponent;
  begin
    if GetTypeData(PropInfo^.PropType^)^.ClassType.InheritsFrom(TComponent)
    then begin
     Component := TComponent(GetOrdProp(Instance, PropInfo));
     if Component = nil then
     Result := ''
     else
     Result := Component.Name;
    end else begin
     FmtStr(Result, '(%s)', [PropInfo^.PropType^.Name]);
    end;
  end;



必須引用一個別人寫的物件
只有以下是我寫的
//******************************************************************************
procedure TForm1.Button2Click(Sender: TObject);
//*********************************************
function objins(Sender: TObject):TStringList;
const
KindTYPE : array [0..17] of string =('Unknown','Integer', 'Char', 'Enumeration',
    'Float', 'String' , 'Set', 'Class', 'Method', 'WChar', 'LString', 'WString',
    'Variant','Array', 'Record', 'Interface', 'Int64', 'DynArray');
var
 AObjInfo : TObjInfo;
 i :Integer;
 S :String;
 STR :TStringList;
begin
AObjInfo := TObjInfo.Create(sender);
  STR:= TStringList.Create;
  //STR.Add('Object'+' '+AObjInfo.Name);
  //STR.Add(' '+'begin');
  for i := 0 to AObjInfo.PropCount-1 do begin
    S:=' ';
    if AObjInfo.Items[i].Value <> '' then begin //如果是空資料就不顯示
     S:=S+''+ AObjInfo.Items[0].Value;
     S:=S+'_'+ KindTYPE[Ord(AObjInfo.Items[i].Kind)];
     S:=S+'_'+ AObjInfo.Items[i].Name +' = '+ AObjInfo.Items[i].Value;
     S:=S+';';
     //+' , '+ IntToStr(Ord(AObjInfo.Items[i].Kind))
     STR.Add(S);
    end;
  end;
  //STR.Add(' '+'end');
  Result := STR ;
end;
//*********************************************
begin
  Memo1.Lines.Text :=objins(Sender).Text;
end;
//******************************************************************************

procedure TForm1.Button1Click(Sender: TObject);
//*********************************************
procedure AddToTreeView(ATreeNode : TTreeNode ; APanel: TPanel);
var
  i: integer;
  TmpTreeNode: TTreeNode;
begin
  for i := 0 to APanel.ControlCount - 1 do
  begin
    TmpTreeNode := TreeView1.Items.AddChildObject(ATreeNode, APanel.Controls[i].Name,APanel.Controls[i]);
    //TmpTreeNode := TreeView1.Items.AddChild(ATreeNode, APanel.Controls[i].Name);
    if APanel.Controls[i] is TCustomControl then
     AddToTreeView(TmpTreeNode, TPanel(APanel.Controls[i]))
  end;
end;
//*********************************************
var
  i: integer;
  tn, TmpTreeNode: TTreeNode;
begin
  tn := TreeView1.Items.Add(nil, Panel1.Caption);
  for i := 0 to Panel1.ControlCount - 1 do
  begin
    TmpTreeNode := TreeView1.Items.AddChildObject(tn, Panel1.Controls[i].Name ,Panel1.Controls[i]);
    if Panel1.Controls[i] is TPanel then
    begin
     AddToTreeView(TmpTreeNode, TPanel(Panel1.Controls[i]))
    end;
  end;
end;
//******************************************************************************
procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
  Button2Click(TObject(TreeView1.Selected.Data));
end;

Resizing Controls at run time

delphi runtime design library
delphi runtime library

MFC
CRectTracker
Resizing Controls at run time
http://www.codeproject.com/Articles/7771/Limit-CRectTracker-handles
http://www.codeproject.com/Articles/856/Resizing-Controls-at-run-time


TStretchHandle
http://www.torry.net/quicksearchd.php?String=tstretchhandle&Title=Yes
http://delphimaster.net/view/4-1125138258/all

http://neftali.clubdelphi.com/?p=269

The Runtime Design System Suite By Kazuhiro Sasaki.
Runtime Design System v.2.2 FWS 1051 Kb 27 May 1999
By Kazuhiro Sasaki. At runtime, your application users can do Moving Controls, Resizeing Controls, Deleting Controls, Creating Controls, Changing Property in the Object Inspector, Saving Controls and Loading Controls if you use the Runtime Design System. Moreover, you hardly need to do programming.
Fully functional
Source: Included
Exe-demo included
Download: D3 D4


Runtime Designer Component. called TSelectOnRuntime of Neftali (ClubDelphi.com) works on Lazarus


Using Delphi and Python together
Talk for the Australian Delphi User Group (ADUG), July and August 2001
-Andy Bulka
abulka@netspace.net.au

A simple Python evaluator:

Create a new Form
Drop a TMemo (or a TRichEdit)
Drop a TPythonGUIInputOutput 
for displaying Python's messages
Drop a TMemo for the source code
Drop a TPythonEngine
Connect the attribute IO of the 
TPythonEngine to the 
TPythonGUIInputOutput.
Connect the attribute Output of 
TPythonGUIInputOutput to 
the TRichEdit.
Drop a TButton and 
call it "Execute script"
Double-click on the button and add:

delphi 如何實現動態物件

delphi 如何實現動態物件  


有什方法可以在不知到物件數目的情況下
在執行時期動態產生物件
就像是ValArray一樣可以變大變小

1.宣告動態陣列, 例: edt: array of TEdit; 
2.設定動態陣列的長度, 例: SetLength(edt, 10);
3.動態 create 元件, 例:
var
  i: integer;
  
begin
  for i := 0 to 9 do
  begin
    edt[i] := TEdit.Create;
    edt[i].Parent := Form1;
    edt[i].Left := ...;
    edt[i].Top := ...;
  end;
end;
  
SetLength(edt, 10); 

它適合""非物件""的動態ㄝ
我看它的原始碼是利用記憶體抓取的方法
我有查到有一種物件TObjectList不知到這個行不行
或是更上層的Tlist也市不錯用的
  
 
我想會出現記憶體錯誤的情形在於重設陣列大小之前
還必須手動將不要用的 TEdit Free 掉
  
TObjectList 也是個很好的選擇!
  
就是要如何釋放掉ㄋ
用TEdit[i].free OR TEdit[i].Destroy
OR SetLength(TEdit,0) OR freeMem(@TEdit) OR......
前三種都是過嚕會出現"無效指標"

edt[i].Free;
edt[i] := nil;
或

FreeAndNil(edt[i]);

delphi 由滑鼠座標取得所在座標的字元位置

delphi 由滑鼠座標取得所在座標的字元位置 
1)
richedit 
由滑鼠座標取得所在座標的字元位置
(為了讓richedit在被dorpdrag時達到拖曳到插入貼上)

2)
richedit 不行輸入TAB怎辦

>1)
>richedit 
>由滑鼠座標取得所在座標的字元位置
>(為了讓richedit在被dorpdrag時達到拖曳到插入貼上)
 
 TRichEdit.GetCaretPos 函式可達到
 
>2)
>richedit 不行輸入TAB怎辦
 

 RichEdit1.WantTab := True;