반응형

윈도우, 안드로이드, iOS, 맥 OS용 앱을 한 번에 개발하고 싶어요.

 

요즘은 안드로이드 버전, iOS 버전 개발을 별도로 해야하기 때문에 

둘 다 정직원을 쓰거나 (인건비 비용이 엄청나죠) 

하나는 정직원, 하나는 프리랜서 또는 두 버전 모두 프리랜서를 고용해서 제품 개발을 하는 경우가 있습니다.

앱 개발이 부담이 되어서 하이브리드 앱 버전을 개발하는 사례도 빈번합니다.

 

이러한 문제를 해결해주는 개발툴이 몇 가지가 있습니다.

Cross-X-platform 또는 Multi-platform 개발툴이라고 합니다.

제가 개발 해오던 개발툴 Delphi 7.0부터 주로 개발해 오던 개발 언어 IDE툴이 있습니다.

(Fotran, assembly, C/C++, visual C++, visual Basic, visual C#, PowerBuilder, C++Builder, Delphi, 웹언어는 제외)

자바나 파이썬, golang은 요즘 배우고 있습니다. 주 언어가 아니면 개발 속도가 떨어지기는 합니다만

다양한 언어를 배우다 보니 프레임워크가 갖추어진 팀과 일할 때는 별 무리 없이 일하게 됩니다.

 

이야기가 옆으로 나갔군요.

크로스플랫폼이 되는 네이티브 앱 개발툴 이야기를 해야하죠.

윈도우, 안드로이드, iOS만 되는 것만 해도 대단하다는 생각이었습니다.

하지만, 여기에 iMac, Linux까지 가능하다뇨. 정말 정말 대단하다는 생각입니다.

이 모든 것이 가능한 개발툴이 바로 

엠바카데로의 Rad Studio XE 버전입니다.

이미지 출처: devgear.co.kr

 

개인적으로 이 개발툴을 구입해서 개발을 하기에는 개발툴이 너무 비싸서 포기하고 있었는데요.

그런데 희소식이 날아듭니다. 무료버전이 나왔습니다. 트라이얼이 아닙니다. 무료입니다.

"커뮤니티 에디션은 개인이 비영리 목적으로만 완전 무료"

우선 개인적으로 개발을 계속 해볼 수 있는 기회가 생겨서 무척 기쁩니다.

이미지 출처: embacadero.com

Rad Studio로 개발 비용 절감과 개발기간 단축, 고려해 보시지 않겠습니까?

저라면 해보고 싶습니다.

무료버전 Rad Studio Community Edition 은 아래 사이트로 가서 다운로드 받을 수 있습니다.

devgear.co.kr/archives/products/delphi_ce#qualification

 

델파이 – 커뮤니티 에디션 | 데브기어

 

devgear.co.kr

 

 

반응형
Posted by SB패밀리

댓글을 달아 주세요

Delphi vs. C# vs. Java

http://vschart.com/compare/delphi-programming-language/vs/c-sharp/vs/java-programming-language

출처 : http://vschart.com/compare/delphi-programming-language/vs/c-sharp/vs/java-programming-language

자세히 보려면 출처를 클릭하세요.

 

반응형
Posted by SB패밀리

댓글을 달아 주세요

Delphi vs. Python

http://vschart.com/compare/delphi-programming-language/vs/python-programming-language

http://vschart.com/compare/delphi-programming-language/vs/python-programming-language

 

  Delphi Python
  Delphi (Pascal based programming language) Python
Category Programming Language Programming Language
Preference 49% votesvotes 51% votesvotes✏
Website www.​embarcadero.​com/​products/​delphi www.​python.​org
License Commercial, Community Edition - Free Python Software Foundation License
Features    
Unicode Yes Yes
Interpreter No Yes
More    
Description Delphi is derived from Borland's dialect of Object Pascal. Is object oriented and procedural too. Python is both object-oriented and functional. It blends a number of modern language features, while maintaining close compatibility with C/C++.
Brand Embarcadero ?
Tag OOP, Multiparadigm, Event Driven OOP, Multi-paradigm
Multi-user system Yes Yes
Autofocus Yes ?
Memory recommended 2 GB 1 GB
Pingback Conditional ?
Extension/Plug-in Yes Yes
Image processing engin Yes Pillow
Operating system Windows, Android, iOS, Mac OS X, Linux Cross-platform
Programming language Delphi, Assembly Python
Database InterBase, Microsoft SQL Server 2017, MySQL, Oracle, firebird, cassandra, MemSQL, Microsoft Access, PostgreSQL, MongoDB MySQL, PostgreSQL, CouchDB, MongoDB, cassandra, Oracle, firebird, MariaDB, Google F1, Redis, RethinkDB, Neo4J Community
Multilingual content Yes Conditional
Database model NoSQL, Relational, Schema-less, Key-value, Distributed data structure Distributed data structure, Object-relational, Relational, Graph-oriented
Transactions Conditional Yes
Energy consumption ●●●●○ ●●●○○
Price rating ●●●○○ ●●●●●
WYSIWYG-Editor Yes Yes
Multiple projects Yes Yes
Standard compliance Yes Yes
External pages Yes Yes
User statistics Yes ?
Map and reduce Yes Yes
Revision control Yes Yes
Atomicity Yes Conditional
Isolation Yes Yes
Horizontal scalable Yes Yes
Template language Any you want Jinja, Genshi, Chameleon
Target audience Enterprise, Web Development, Cloud computing, swift, Government, Intanet, ISV, App developer, Healthcare, Game developer industry, Financial Services, Android development Beginner, System Adminstration, Web Development, App developer, Cloud computing, Research & Development, Game developer industry, Embedded system, Data Analysis, Hegoda Development
Framework VCL, FireMonkey, DataSnap, FireDAC, WebBroker, MVC, MVC Spring - ( portlet ), Meteor, UniGui, intraweb Django, Pyramid, Flask
Full text search Yes Yes
Scaffolding Yes Yes
Design pattern Active-Record, Activities and Places, Chain of responsibility, Decorator, Data Mapper, Delegate, Hooking, HMVC, Facade, Dependency injection, Factory, Service Locator, RESTfull, model-view-presenter, MVVM Model-View-Controller, Dependency injection, MTV, RESTfull, Singleton, Procedural, Decorator, Factory, Domain Driven Design, Model-Template-View
Difficulty level Beginner, Intermediate, Advanced, Master, Godly Beginner, Intermediate, Advanced, Master
Application startup time 50 ms 78 ms
Version number Delphi 10.3.3 Rio 3.8.1
Adobe Flash Support Yes Yes
Object-Relational Mapping (ORM) Yes Yes
Infrared Port Yes ?
Machine Code Generation Yes Yes
Release Date 1986 December 1989
3D Screen Yes ?
Documentation level ●●●●○ ●●●●●
E-Mail protocols IMAP, POP3, SMTP, MAPI ?
Multi tasking Yes Yes
Influences Pascal, Turbo Pascal, C++, .NET Framework, JavaScript, REST ABC programming language, C, C++, Smalltalk, Fortran, F#
RESTful Yes Yes
Code Generation Yes Yes
Dynamic typing No Yes
Programming paradigm Object-oriented, Imperative programming, Event-driven, Aspect-oriented programming, Component-oriented, Functional Imperative, Object-Oriented
Comments Yes Yes
Scripting language support All of them MUMPS
Free to use Yes Yes
Frontend Delphi, Assembly, Object Pascal ?
Backend Assembly Python, Java (any JVM scripting language), .NET Framework, C, JavaScript
Active Yes Yes
Supported VCS CVS, Git, Subversion, Any Git, github, Subversion, Any
Database Connection Pooling Yes Yes
Compression Yes Yes
Audio Out Yes Yes
Separate Service Layer Yes ?
Creation Date 1985 December 1989
Community Driven Good Good
Wizard Yes ?
HTML syntax Yes Yes
WSDL Yes Yes
REPL Yes Yes
Reliability ●●●●● ●●●●●
Sync file manager Good ?
Versioning Good Good
Data encryption Yes Yes
Custom queries Good Good
Layout Structure Template Yes Yes
File Assets Yes Yes
API Good Good
Compiled language Yes No
Syntax Highlighting Yes Yes
XML Aware Good Good
Embeddable Yes Yes
Data storage Any ?
Open Architecture Yes Yes
Cloud platform support Amazon AWS, Google Cloud Engine, Windows Azure Amazon EC2, Google App Engine, Windows Azure, DigitalOcean, Cloud 9, AWS Lambda, Heroku
Data types ALL ANSI Standards String, INTEGER, Floating, List, Map, Tuple, Complex, Java Object
Compiler Yes Yes
Browser support All of them ?
API comprehensibility ●●●●● ●●●●○
Active Directory Yes Yes
Custom Themes Yes Yes
Webmail Yes Yes
Jobs Oportunities ●●●●○ ●●●●●
Implementation flexibility 50% votes 50% votes
Out-of-the-box functionality 56% votes 44% votes
Control structures Yes Yes
SOA Yes ?
Annotation Support Yes Yes
LDAP Yes Yes
Query Cache Yes Yes
Realtime Yes Yes
Data Security Yes Yes
Community feedback ●●●●○ ●●●●○
Ease of use ●●●●● ●●●●○
Malicious Injection Prevention No Yes
Copy, Cut and Paste Support Yes Yes
Free for commercial use Yes Yes
Duck typing Yes Yes
360° Camera Yes ?
Useless Yes No
Realtime Server Push Yes Yes
Easy of Use Yes Yes
Latest Standard March 2018 27ᵗʰ June 2016
JVM No Yes
CLR Yes Yes
Open Source No Yes
Source Repository front-end ?
Nested Comments Yes Yes
Type inference No Yes
IntelliSense Yes Yes
Magic Yes Yes
Websocket Support Yes Yes
Maven support No No
Resource File Processing Yes ?
Events Support Yes Yes
Lambda Expressions Yes Yes
Language Integrated Query No No
Properties Yes Yes
Partial Classes Yes Yes
Unsafe code support Yes Yes
Value types creation Yes Yes
Value type variables passing as reference Yes No
Method signatures passing as parameter Yes Yes
Safe casting Yes Yes
Global Assembly Cache No No
Runtime Generic Support Yes Yes
Runtime dynamic types Yes Yes
Closures Yes Yes
Delegates Yes Yes
iOS Development Support Yes Yes
Native asynchronous operators await/async Yes Yes
Perfomance ●●●●● ●●●●○
Database migrations Yes Yes
I like it Yes Yes
Asyncronous JS loading Yes ?
Debug Mode Yes Yes
Static Typing Yes Yes
Cloud-enabled Yes Yes
Click & Edit in Place / WYSIWYG Yes ?
Autocomplete Code Yes Yes
Dependency Injection Yes No
Symbols Yes No
Personalization Yes ?
Supported from Google No Yes
Makes you angry Yes Yes
Spring Data Support Yes ?
Easy to Learn Yes Yes
Creates a slew of inefficient Javascript No No
Extensibility Yes Yes
Unit Testing Yes Yes
Ajax Yes Yes
GUI Yes Yes
User management Yes ?
Macro System Yes No
Higher Kinded Types Yes No
Pattern Matching Yes Yes
Compiler Plugin Architecture Yes No
ORM Join Support Yes Yes
Object-Oriented Views Yes Yes
Object Oriented Models Yes Yes
Mobile ready Yes Yes
PDF Support Yes Yes
Operating system server Cross-platform, Mac OS X, Windows, Android, iOS, Linux Cross-platform
Package Manager Yes Yes
Makes developer create a slew of inefficient Javascript No Yes
Easy Setup Yes Yes
Jquery Yes Yes
jQuery Support Yes ?
Optional Static Type Yes No
Supports Plugins Yes ?
Stored Procedure Yes ?
Vertically Scalable Yes Yes
Android App Yes Yes
Full-Stack Yes Yes
Supports custom tags Yes Yes
User-friendly Yes Yes
Component Oriented Yes No
Internationalization Yes Yes
Heroku Support No Yes
Framework specific vocabulary Yes Yes
Easy to Config Yes Yes
Can you modify it freely to make it better Yes Yes
JIT Compiler Yes Yes
Type Safety Yes No
Self Server Yes Yes
Will get you a job Yes Yes
Is reliable and secure Yes Yes
Text-based Yes Yes
Scalability Yes Yes
Ability to link to external programs and systems Yes Yes
Supported by Microsoft Yes Yes
Bytecode Generation No Yes
Official IDE Support Yes Yes
Tasks Yes ?
Use components elsewhere? Yes Yes
Responsive Website Yes ?
Can function without AJAX Yes Yes
Concurrency Yes Yes
HTML Binding Yes Yes
Programs Registrator Viewer, Kingsoft Office, DesktopGate Employee Monitoring, Skype client, FL Studio, Embarcadero RAD Studio, Age of wonder 2, Kaspersky Anti-Virus 8.0, Smart Mobile Studio, Spybot, Spyware Terminator, SSuite Office Software, Space Rangers 2, DVB viewer, RADIOBOSS, Travis CI, GameMaker Studio, Advanced Uninstaller PRO, Advanced SystemCare, Bowling Tournament Manager, BurnAware, ConvertXToDVD, DSpatial, Navicat Premium, AIMP, Ares Galaxy, BS Player, CoffeeCup HTML Editor, DeepBurner, Editpad, Everest, Glary Utilities, Helium Music Manager, Inno Setup, IZArc, PHP Designer, Smart Defrag, SpeedFan, TweakNow RegCleaner, XIII Century - Death or Glory, Zoom Player, Total Commander File Management Tool, BiziByte Sublime Text 3, BitTorrent, Pycharm, Visual Studio Code
Fully OO Yes ?
Dynamic Language Yes Yes
Enterprise Yes Yes
Namespaces Yes Yes
Linguagem do capeta Yes ?
wtf mode Yes ?
Aburrido? Yes No
Android Development Support Yes Yes
3rd Party Lib Support Yes ?
MVC Yes No
Stability 101 50
WillGetYouLaid Yes Yes
Average Salary 50 000 ?
Developed for Human Yes Yes
Exist In The Future Yes Yes
ORM that doesn't hurt Yes Yes
Windows Development Support Yes Yes
3D Support Yes ?
Written By Monkeys No Yes
javascript compiler No Yes
Manual Memory Management Yes No
Garbage Collection Yes Yes
fappable Yes Yes
Yes Yes
Sodium 7 0
Windows support Yes Yes
Increase Stress Levels Yes No
Inheritance Yes Yes
:) Yes Yes
State of the art technology Yes Yes
deprecated No No
C++ power Yes Yes
Awesome Yes Yes
Makes your hair fall Yes No
Looks good on resumé No Yes
People in suits No No
is michael gek No Yes
coolnes rating Yes Yes
Proves You Can Code? Yes No
Shitty Code Yes ?
Is a Snake ? Yes Yes
Does your mom understand it No No
Clean Yes Yes
Atractive Yes Yes
High peformance Yes No
For handsome devs No Yes
Make life easier Yes Yes
Can be developed from linux Yes Yes
1 OR 1=1; Yes Yes
elegant Yes Yes
Doesn't Suck Yes Yes
Write Less, Do More Yes Yes
Does it hate you? Yes Yes
CLI` Yes Yes
Bootstrap Yes Yes
Do I Like it Yes Yes
Used by Chuck Norris Yes No
Funny Yes Yes
IE Compatibility Yes Yes
Command-line console Yes Yes
Did I waste my time going down all these options?! No Yes
WTF Yes ?
can make u rich No ?
Better than Node.js No Yes
Popularity 101 999 999
Easy to learn Yes Yes
Integrated Debugger Yes Yes
Simple Yes Yes
Influenced JavaScript, TypeScript, Go, Java ?
This is getting out of hand. Yes Yes
This site is useless Yes Yes
template metaprogramming Yes ?
true modules Yes Yes
Was it worth reading till end? Yes Yes
Is Better Than ASP .NET MVC Yes Yes
Likes Pizza Yes Yes
It sucks No No
Could be used also in a computer? Yes ?
Will it blend? Yes Yes
Actually works Yes Yes
You also wasted time on this? Yes Yes
DOES SHIT Yes Yes
Is for noobs Yes Yes
Can teleport an unicorn in your room Yes No
is from microsoft No No
Hitler liked it No Yes
wtf/minute -64 0
Makes you insane No No
\lim_{x\to 2}f(x)=w? Archos Audi
Abstracts complexity of UI Components Yes ?
is it dumb to allow rows to be added without moderation? No Yes
has pointers Yes No
Modify Code in Runtime Yes Yes
The Cow likes it Yes Yes
is a language? Yes Yes
Did Microsoft declare it "the standard"? No No
Hello World! Yes Yes
Can it print 39? Yes Yes
Yes or No? Yes Yes
Makes you a racist? No Yes
Sometimes I like to imagine that I'm a banana Yes ?
Would you like fries with that? Yes ?
Admin interface? Yes ?
Pinnacle Yes ?
Approval Pinnacle Yes ?
Should I learnd It? Yes Yes
Multiple Inheritance Yes Yes
Makes you wanna have sex? No Yes
supports Serialization Yes Yes
Supports Web Yes Yes
4+2 6 6
Are you still reading? Yes Yes
Threadsafe No No
"; drop table *; -1 2
Stolen Yes No
Vendor Lock-In No No
Will it degrade your intelligence No No
Does it Collect Garbage? No Yes
Average executable size (MB) 3 ?
Brazil Yes ?
Keyboard support Yes Yes
Suitable for Desktop App Development Yes Yes
Suitable For CLI Development Yes Yes
Suitable for Shell Scripting Yes ?
Suitable for Mobile Development Yes Yes
Allows Spaghetti code Yes Yes
Does it give you LÖVE? Yes No
can donald trump build a wall using this ? No Yes
Cures Cancer No Yes
Can be used for sexual satisfaction Yes ?
42 ? Yes ?
How long it takes to learn? 1 y 2 h
Posted on reddit? Yes ?
Drink? Yes ?
Stupidity No Yes
Are you a programmer? Yes No
function calling model All call-by-object
Uses Nazi symbol for logo No No
Harambe loves it? Yes ?
Simple to understand Yes Yes
 Exportar a Excel las personas relacionas con la solicitud Yes ?
Used to hack Clinton's e-mail server Yes No
Better than Kotlin No ?
Sexy? Yes Yes
Full Logic Yes Yes
Reads naturally Yes Yes
Fast to develop Yes Yes
Resilient to change Yes Yes
A genius would like it Yes Yes
Approved by gay community Yes No
Fun to work with Yes Yes
Is the best choice Yes No
Mid or Feed No ?
Rhymes with another english word Yes Yes
Trackback ? Yes
Development principles ? Don't repeat yourself, Python Zen
Admin Generator ? Yes
Clone Test ? No
Requests per second ? 1
Amount of letters ? 6
CKDI - All the Cool Kids Do It ? No
Is VsChart totally worthless? ? Yes
Will make your wiener twitch ? Yes
Bullshit ? No
Crappy as wordpress ? No
Starts with A ? No
Brutality ? 56
are you stupid ? Yes
Final Score ? 9 004
A lisp? ? No
Can make a cup of coffee ? Yes
Для шкальников ? Yes
Is it Lisp? ? No
Is a bird? ? No
Feeling Special ? Yes
Has vagina? ? Yes
will make you reach ? Yes
Impresses your boss ? No
WillcreatewarBetwenUS&Russia ? Yes
Almost Godly in Power ? No
Can be used to invoke demons ? Yes
Recomended by Morgan Freeman? ? No
Best language ever? ? No
Does it poop in your fridge? ? No
can understand parseltongue? ? Yes
Is Force sensitive? ? Yes
Got some property? ? Yes
360 noscope triple headshot API ? Yes
Is a cagada ? No
Allow you to use the Force ? Yes
; drop table users; ? Yes
Spelled with 2 letters ? No
Power Level ? 1.21 GW
dafuq!!! did i just read all this bullshit ? Yes
Votes For Trump ? No
Is also a music note? ? No
Amount of symbols ? 0
Whitening teeth ? No
Batmobile Support? ? Yes
function calling model "call-by-value" ? No
Does it have Pywai's Ping? ? Yes
Named after a comedy group? ? Yes
Is Literal Garbage ? No
Disrespect poor languages? ? No
Is groovy? ? Yes
Machine learning ? Yes
Believes the World Is Flat ? No
Will Help Trump Make America Great Again ? Yes
Clojure ? No
lavalamp ? Yes
Willy ? No
69 ? Yes
Frictionless in 90% of cases ? No
Mistake proof ? No
Lax ? Yes
This table is based on the vsChart comparison Delphi vs. Python comparison | vsChart.com, which is released under the Creative Commons Attribution-Share-Alike License 3.0.

 

http://vschart.com/compare/delphi-programming-language/vs/python-programming-language

반응형
Posted by SB패밀리

댓글을 달아 주세요


Delphi Compiler Versions


The following table lists the version number associated with each release of Delphi compilers, beginning with Turbo Pascal 4.0 and ending with the current version of the compiler:

Delphi conditional VER<nnn>ProductProduct VersionPackage VersionCompiler Version
VER320Delphi Tokyo / C++Builder Tokyo (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2525032.0
VER310Delphi Berlin / C++Builder Berlin (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2424031.0
VER300Delphi Seattle / C++Builder Seattle (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2323030.0
VER290Delphi XE8 / C++Builder XE8 (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2222029.0
VER280Delphi XE7 / C++Builder XE7 (Delphi:Win32/Win64/OSX/iOS/Android) (C++Builder:Win32/Win64/OSX/iOS/Android)2121028.0
VER270Delphi XE6 / C++Builder XE6 (Delphi:Win32/Win64/OSX/iOS/Android) (C++Builder:Win32/Win64/OSX/iOS/Android)2020027.0
VER260Delphi XE5 / C++Builder XE5 (Delphi:Win32/Win64/OSX/iOS/Android) (C++Builder:Win32/Win64/OSX/iOS)1919026.0
VER250Delphi XE4 / C++Builder XE4 (Delphi:Win32/Win64/OSX/iOS) (C++Builder:Win32/Win64/OSX)1818025.0
VER240Delphi XE3 / C++Builder XE3 (Delphi:Win32/Win64/OSX) (C++Builder:Win32/Win64/OSX)1717024.0
VER230Delphi XE2 / C++Builder XE2 (Delphi:Win32/Win64/OSX) (C++Builder:Win32/OSX)16160161 is the version for the five FireMonkey packages at XE2 Update 2: fmi161.bpl, fmx161.bpl, fmxase161.bpl, fmxdae161.bpl, and fmxobj161.bpl.23.0
VER220Delphi XE / C++Builder XE (Win32)1515022.0
VER210Delphi 2010 / C++Builder 2010 (Win32)1414021.0
VER200Delphi 2009 / C++Builder 2009 (Win32)1212020.0
VER190Delphi 2007 for .Net *1111019.0
VER180 or VER185Delphi 2007 / C++Builder 2007 for Win32 *1111018.5
VER180Delphi 2006 / C++Builder 2006 (Win32/.Net) and Delphi/C++Builder 2007 for Win321010018.0
VER170Delphi 2005 (Win32/.Net)99017.0
VER160Delphi 8 for .Net88016.0
VER150Delphi 7 (and 7.1)77015.0
VER140Delphi 6 / C++Builder 666014.0
VER130Delphi 5 / C++Builder 55NANA
VER125C++Builder 44NANA
VER120Delphi 44NANA
VER110C++Builder 33NANA
VER100Delphi 33NANA
VER93C++Builder 1NANANA
VER90Delphi 22NANA
VER80Delphi 11NANA
VER70Borland Pascal 7.0NANANA
VER15Turbo Pascal for Windows 1.5NANANA
VER10Turbo Pascal for Windows 1.0NANANA
VER60Turbo Pascal 6.0NANANA
VER55Turbo Pascal 5.5NANANA
VER50Turbo Pascal 5.0NANANA
VER40Turbo Pascal 4.0NANANA

* Note that Delphi 2007 defines two VERxxx symbols (VER180 and VER185). Delphi 2006 and 2007 are binary compatible, so 180 works for both. If you need only 2007, use VER185.

NoteCompilerVersion was first introduced with Delphi 6, so earlier versions do not have the CompilerVersion constant.

출처: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions

반응형
Posted by SB패밀리

댓글을 달아 주세요

[delphi] IP주소 유효성체크


20070326



function TForm1.IsValidIPAddress(strIP: String): Boolean;
var
TempList: TStringList;
i: Integer;
nTemp: Integer;
begin
Result := False;
TempList := TStringList.Create;

ExtractStrings(['.'], [], PAnsiChar(strIP), TempList);
if TempList.Count = 4 then
begin
   for i := 0 to 3 do
   begin
     nTemp := StrToIntDef(TempList[i], -1);
     if (nTemp < 0) or (nTemp > 255) then
     begin
       break;
     end;
   end;
   Result := True;
end;

TempList.Free;
end;


반응형
Posted by SB패밀리

댓글을 달아 주세요

[delphi] 캡션없는 폼 드래그로 이동하기



폼의 캡션을 사용하지 않거나 캡션이 없는 폼을 이동하는 방법입니다.

폼에 WMNCHitTest 윈도우 메시지 핸들러를 오버라이딩 해서 처리합니다.


TForm1 = class(TForm)
  ...
  procedure WMNCHitTest( Var M: TWMNCHitTest );
      message WM_NCHITTEST;
...
end;

implementation
...
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin

  inherited;                    // call the inherited message handler
  if  M.Result = htClient then  // is the click in the client area?
  M.Result := htcaption;      // if so, make Windows think it's
                              // on the caption bar.
end;


반응형
Posted by SB패밀리

댓글을 달아 주세요

[Delphi] 작업관리자에 내 프로세서 감추기


출처: 델마당 - 질문과 답변 
[답변] 작업관리자에 내 프로세써 감추기 (델파이5 프로 구함)  
98 시절 여러 해킹 프로그램이 이 함수를 이용하여 나쁜짓을 했었는데,
2000 이상급에서는 없어진줄로 압니다.

아마 보안 땜시...


뷰티 wrote:
> 98 에서는 다음과 같이 RegisterServiceProcess 를 호출해서 프로세스를 숨길수 
> 있습니다, 그런데 이 함수가 win2000 에서는 동작이 안되고 '시작점을 찾을 수 없다는'
> 에러가 나옵니다

> function RegisterServiceProcess(dwProcessID, dwType: Integer): 
> Integer; stdcall; external 'KERNEL32.DLL';

> Fvalue := False;
> IF Fvalue then  
>    RegisterServiceProcess(GetCurrentProcessID, 1);


> 혹시 Windows 9x/nt/xp 에서 사용이 가능한가요?

> 검색하다보니 

> 민성기님이 답글 달아 놓은 링크가 있었는데

> 너무 오래되서 그런지... File not Found -_-



반응형
Posted by SB패밀리

댓글을 달아 주세요

[delphi] Thread를 이용하여 ProgressBar 그리기

 

2003.12.16

 

 

http://www.swissdelphicenter.ch/torry/showcode.php?id=1887...paint a moving progress bar using a background thread? 
Author: P. Below  
1 Comment to this tip [Write new comment] 
[ Print tip ]     

Tip Rating (6):   
       




  Question: 

  I am trying query to display records in a dbgrid.however, due to size 
  of tables and joins takes a while for the query to Execute.is 
  there any way to Show a prorgess bar with a timer that increments 
  position but continues to work while the query is being executed.BTW, 
  using access so BDE is not used. 

DB그리드에 레코드를 표시하기 위해 쿼리를 시도 중입니다.
그러나 테이블 및 조인의 크기 때문에 쿼리를 실행하는 데 시간이 걸립니다.
쿼리가 실행되는 동안 위치를 증가시키지만 계속 작동하는 타이머로 
Progess 막대를 표시할 수 있는 방법이 있습니까?
어쨌든, 액세스 사용에 BDE를 사용하지 않습니다.


  Answer: 
   
  A progress bar would not be an ideal choice since you cannot determine up 
  front how long the query will take, so you do not know the range the progress 
  bar has to cover.A simple kind of animation that tells the user basically 
  only that the application is not hung would be more appropriate.One could do 
  such a thing in a secondary thread but it would have to be done using the 
  plain Windows API and * no * Synchronize calls (since the main thread is 
  blocked in the BDE call).Here is an example: unit anithread; 

진행률 막대는 쿼리에 시간이 걸릴지 미리 결정할 수 없으므로 이상적인 선택이 아닙니다. 
따라서 진행률 표시줄이 어디까지 적용되어야 하는지 알 수 없습니다.
사용자에게 어플리케이션이 멈춰있지 않은 것만 
기본적으로 알려주는 간단한 애니메이션이 더 적절할 것이다.

보조 스레드에서 이러한 작업을 수행할 수 있지만 
일반 Windows API와 * No * Synchroniz 호출을 사용하여 수행되어야 합니다
(기본 스레드가 BDE 호출에서 차단되었으므로).

다음은 anithread 단위의 예입니다.
interface 

uses 
  Classes, Windows, Controls, Graphics; 

type 
  TAnimationThread = class(TThread) 
  private 
    { Private declarations } 
    FWnd: HWND; 
    FPaintRect: TRect; 
    FbkColor, FfgColor: TColor; 
    FInterval: integer; 
  protected 
    procedure Execute; override; 
  public 
    constructor Create(paintsurface : TWinControl; {Control to paint on } 
      paintrect : TRect;          {area for animation bar } 
      bkColor, barcolor : TColor; {colors to use } 
      interval : integer);       {wait in msecs between 
paints} 
  end; 

implementation 

constructor TAnimationThread.Create(paintsurface : TWinControl; 
  paintrect : TRect; bkColor, barcolor : TColor; interval : integer); 
begin 
  inherited Create(True); 
  FWnd := paintsurface.Handle; 
  FPaintRect := paintrect; 
  FbkColor := bkColor; 
  FfgColor := barColor; 
  FInterval := interval; 
  FreeOnterminate := True; 
  Resume; 
end; { TAnimationThread.Create } 

procedure TAnimationThread.Execute; 
var 
  image : TBitmap; 
  DC : HDC; 
  left, right : integer; 
  increment : integer; 
  imagerect : TRect; 
  state : (incRight, incLeft, decLeft, decRight); 
begin 
  Image := TBitmap.Create; 
  try 
    with Image do  
    begin 
      Width := FPaintRect.Right - FPaintRect.Left; 
      Height := FPaintRect.Bottom - FPaintRect.Top; 
      imagerect := Rect(0, 0, Width, Height); 
    end; { with } 
    left := 0; 
    right := 0; 
    increment := imagerect.right div 50; 
    state := Low(State); 
    while not Terminated do  
    begin 
      with Image.Canvas do  
      begin 
        Brush.Color := FbkColor; 
        FillRect(imagerect); 
        case state of 
          incRight:  
          begin 
            Inc(right, increment); 
            if right > imagerect.right then  
            begin 
              right := imagerect.right; 
              Inc(state); 
            end; { if } 
          end; { Case incRight } 
          incLeft:  
          begin 
            Inc(left, increment); 
            if left >= right then  
            begin 
              left := right; 
              Inc(state); 
            end; { if } 
          end; { Case incLeft } 
          decLeft:  
          begin 
            Dec(left, increment); 
            if left <= 0 then  
            begin 
              left := 0; 
              Inc(state); 
            end; { if } 
          end; { Case decLeft } 
          decRight:  
          begin 
            Dec(right, increment); 
            if right <= 0 then  
            begin 
              right := 0; 
              state := incRight; 
            end; { if } 
          end; { Case decLeft } 
        end; { Case } 
        Brush.Color := FfgColor; 
        FillRect(Rect(left, imagerect.top, right, imagerect.bottom)); 
      end; { with } 
      DC := GetDC(FWnd); 
      if DC <> 0 then 
        try 
          BitBlt(DC, 
            FPaintRect.Left, 
            FPaintRect.Top, 
            imagerect.right, 
            imagerect.bottom, 
            Image.Canvas.handle, 
            0, 0, 
            SRCCOPY); 
        finally 
          ReleaseDC(FWnd, DC); 
        end; 
      Sleep(FInterval); 
    end; { While } 
  finally 
    Image.Free; 
  end; 
  InvalidateRect(FWnd, nil, True); 
end; { TAnimationThread.Execute } 

end. 

{Usage: 
Place a TPanel on a form, size it as appropriate.Create an instance of the 
TanimationThread call like this: procedure TForm1.Button1Click(Sender : TObject); 
} 
var 
  ani : TAnimationThread; 
  r : TRect; 
  begin   
  r := panel1.clientrect; 
  InflateRect(r, - panel1.bevelwidth, - panel1.bevelwidth); 
  ani := TanimationThread.Create(panel1, r, panel1.color, clBlue, 25); 
  Button1.Enabled := False; 
  Application.ProcessMessages; 
  Sleep(30000);  // replace with query.Open or such 
  Button1.Enabled := True; 
  ani.Terminate; 
  ShowMessage('Done'); 
end;
반응형
Posted by SB패밀리

댓글을 달아 주세요

[delphi/web] how to detect when a Document is comp...



2004.01.12


An other example:

This example shows how to detect when a document is completely 
loaded, even if it includes multiple frames. Only the final 
OnDocumentComplete event passes the same Dispatch interface as the 
OnNavigateComplete event handler.

var
  CurDispatch: IDispatch; {save the interface globally }

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const 
pDisp: IDispatch; var URL: OleVariant);

begin
  if CurDispatch = nil then
    CurDispatch := pDisp; { save for comparison }
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const 
pDisp: IDispatch; var URL: OleVariant);
begin
  if (pDisp = CurDispatch) then
  begin
    Beep; {the document is loaded, not just a frame }
    CurDispatch := nil; {clear the global variable }
  end;
end;

cu Andries

반응형
Posted by SB패밀리

댓글을 달아 주세요

Delphi 설치 후 TADOConnection(dbgo)이 없다?



델파이(Rad Studio)를 설치했는데


프로젝트를 로딩하는 중에 TADOConnection이 없다고 나온다면.?


황당하지만 어쩔 수 없이 수동으로 등록을 해주어야 한다.


<Delphi 2010 기준>

TADOConnection

C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\bin\dclado140.bpl

* install package 메뉴를 선택해서 위의 bpl을 등록한다.



아래의 방법도 있다.

설치 DVD(ISO)에서 dbpack_setup.exe를 실행해서 modify 옵션으로 설치하면 package가 델파이에 등록된다.


Database package

[DVD Drive]:\Install\dbpack_setup.exe

(RAD Studio 설치후 데이터베이스(ex:adodb)패키지가 없을 실행해서 modify 실행)





반응형
Posted by SB패밀리

댓글을 달아 주세요

Delphi 설치 후 TChart(TeeChart)가 없다?



TeeChart 가 델파이 설치시에 설치는 되었지만

VCL Package로 등록되지 않아서 문제가 발생합니다.


자, 그럼 등록 해줍니다.


델파이 [Component] 메뉴에서 [Install Package...]메뉴를 선택합니다.


[Add]버튼을 클릭하여 델파이 Bin 폴더로 가서 파일 dcltee8140.bpl(Delphi 2010 기준)을 선택합니다.


<2010 기준>

C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\bin\dcltee8140.bpl


<XE3 기준>

C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\bin\dcltee9160.bpl


어렵지 않습니다.



그런데, 설치 후 처음 개발 소스를 불러올 때, TChart가 없다고 한다면, 당황스럽겠죠 ^^

반응형
Posted by SB패밀리

댓글을 달아 주세요

델파이 컴포넌트

delphi VCL



http://sf.net/projects/graphics32http://www.graphics32.org/wiki/
February 25, 2005: Release of Graphics32 1.7.1. 
개발환경 : D4,5,6,7,2005 C5,6

Graphics32 is a library designed for fast 32-bit graphics handling on Delphi and Kylix. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives, and in most cases Graphics32 outperforms the standard TCanvas? classes. It is almost a hundred times faster in per-pixel access and about 2–5 times faster in drawing lines. 

Features
Some of Graphics32 features include: 

Fast per-pixel access up to 100 times faster compared to standard TBitmap?; 
High-performance Bitmap alpha blending (including per-pixel alpha blending); 
Pixel, line and polygon antialiasing with sub-pixel accuracy (combined with alpha blending); 
Arbitrary polygon transformations and custom fillings; 
Bitmap resampling with high quality reconstruction filters (e.g. Lanczos, Cubic, Mitchell); 
A unique state-of-the-art rasterization system; 
Affine transformations of bitmaps: rotations, scaling, etc with sub-pixel accuracy; 
Arbitrary projective transformations of bitmaps; 
Arbitrary remapping transformations of bitmaps (e.g. for Warping, Morphing); 
Flexible supersampling implementation for maximum sampling quality; 
Flicker-free image displaying components with optimized double buffering via advanced MicroTiles? based repaint optimizer; 
Multiple customizible easy-to-use overlay layers; 
Locking of bitmaps for safe multithreading; 
A property editor for RGB and alpha channel loading; 
Design-time loading of image formats supported by standard TPicture; 
Works on Borland Delphi, C++ Builder and Kylix. 

As of version 1.5.1b Graphics32 is licensed under the terms of the Mozilla Public License. 

+++++ 설치

Graphics32 supports Delphi versions 4, 5, and 6, and C++ Builder 5.

Note, because some properties of range bars and gage bars have been changed, you can obtain some error messages while opening your previous Graphics32 projects. Just ignore these messages and Delphi will fix DFM files automatically.



Unzip the files; 
Add location of main installation directory to Tools | Environment Options | Library | Library Path. 
Select File | Open... on the menu bar. Set Files of type to Delphi package source, locate and open GR32_DSGN_D6.dpk (GR32_DSGN_D5 for Delphi5, GR32_DSGN_D4 for Delphi4 or GR32_DSGN_B5 for C++ Builder); 
A package editor window will appear. Click Compile, then click Install; 
If compiler asks whether you want to save changes, usually it is a good idea to choose No. 



+++++ 설명:

Additional Topics
Line Patterns

Using TImage32

Classes (Alphabetical)
TAffineTransformation

TArrowBar

TBitmap32

TBitmap32Collection

TBitmap32Item

TBitmap32List

TBitmapLayer

TByteMap

TCustomGaugeBar

TCustomImage32

TCustomImgView32

TCustomLayer

TCustomMap

TCustomPaintBox32

TCustomRangeBar

TGaugeBar

TImage32

TImgView32

TIVScrollProperties

TLayerCollection

TPaintBox32

TPaintStages

TPolygon32

TPositionedLayer

TProjectiveTransformation

TRangeBar

TRubberbandLayer

TThreadPersistent

TTransformation
Classes (Hierarchy)
TArrowBar

TCustomGaugeBar

TGaugeBar

TCustomRangeBar

TRangeBar

TBitmap32Collection

TBitmap32Item

TBitmap32List

TCustomLayer

TPositionedLayer

TBitmapLayer

TRubberbandLayer

TCustomPaintBox32

TCustomImage32

TCustomImgView32

TImgView32

TImage32

TPaintBox32

TIVScrollProperties

TLayerCollection

TPaintStages

TPolygon32

TThreadPersistent

TCustomMap

TBitmap32

TByteMap

TTransformation

TAffineTransformation

TProjectiveTransformation


Routines
AlphaComponent  Creating Points  Lighten  
AlphaToGrayscale  Creating Rectangles  OffsetRect  
ApplyLUT  EMMS  Polygon  
Blend  EqualRect  Polyline  
BlendEx  Fixed Point Math  PolyPolygon  
BlockTransfer  Gray32  PolyPolyline  
BlueComponent  GreenComponent  PtInRect  
Color32  HSLtoRGB  RedComponent  
ColorAdd  InflateRect  RGBtoHSL  
ColorMax  Intensity  SetAlpha  
ColorMin  IntensityToAlpha  SetBorderTransparent  
ColorModulate  IntersectRect  SetGamma  
ColorSub  Invert  StretchTransfer  
ColorToGrayScale  InvertRGB  Transform  
Combine  IsRectEmpty  WinColor  

Types
Arrays  TFloatMatrix  TRBHandles  
Color Types  TLUT8  TRBStyle  
Point Types  TPaintBoxOptions  TRectRounding  
Rectangle Types  TPaintStage  TSize  
TConversionType  TPixelCombineEvent  TSizeGripStyle  
TDrawMode  TPolyFillMode  TStretchFilter  
TFixed  TRBBackgnd  

Variables
MMX_ACTIVE  

Constants
Color Constants  IdentityMatrix  Paint Stage Constants  
G32Version  Layer Options Bits  

Units
GR32  GR32_Filters  GR32_Polygons  
GR32_Blend  GR32_Image  GR32_RangeBars  
GR32_ByteMaps  GR32_Layers  GR32_Transforms  



Graphics32_1_7_1.zip


반응형
Posted by SB패밀리

댓글을 달아 주세요

델파이/Delphi VCL 컴포넌트 


Graphics32 v1.8.1 for D5,6,7,2005, C5,6, BDS2006





http://sf.net/projects/graphics32http://graphics32.org/wiki/
Graphics32 is a set of functions, classes, components and controls designed for high-performance graphics programming.

Being highly specialized for 32-bit pixel format, it provides fast operations with pixels and graphic primitives and in most cases Graphics32 considerably outperforms standard TBitmap/TCanvas classes.

The library comes with a full source code, documentation and examples. 



Installation
Graphics32 supports Delphi versions 5, 6, 7, 2005 (Win32), 2006 (Delphi Win32 and C++), and C++ Builder 5 and 6.

As of version 1.6 there is also CLX support in Graphics32. That means you can use it either with CLX on Windows using Delphi or on x86 Linux using the Kylix Delphi environment.



Note: If you want to use the Windows CLX version in Delphi, you'll have to uncomment the {$DEFINE CLX} line in GR32.inc.

Note: For Delphi 2005 and up function inlining is automatically used to improve performance in certain situations. If you want to avoid this, please comment out the {$DEFINE USEINLINING} line in GR32.inc.

Note: Because some properties of range bars and gage bars have been changed, you can obtain some error messages while opening your previous Graphics32 projects. Just ignore these messages and Delphi will fix DFM files automatically.



Unzip the files; 
Add location of main installation directory to Tools | Environment Options | Library | Library Path. 
Select File | Open... on the menu bar. Set Files of type to Delphi package source, locate and open GR32_DSGN_D6.dpk
(GR32_DSGN_K for Kylix, GR32_DSGN_BDS2006 for Borland Developer Studio 2006, GR32_DSGN_D2005 for Delphi 2005, GR32_DSGN_D7 for Delphi7, GR32_DSGN_D6 for Delphi6, GR32_DSGN_D5 for Delphi5 or GR32_DSGN_B5 for C++ Builder); 
A package editor window will appear. Click Compile, then click Install; 
If compiler asks whether you want to save changes, usually it is a good idea to choose No. 



graphics32_1_8_1.zip


반응형
Posted by SB패밀리

댓글을 달아 주세요







PlanMate PMIS 비밀번호와 Mac Address 암호화







반응형
Posted by SB패밀리

댓글을 달아 주세요






소백촌닭 : 델파이에서 암호화 DLL 생성
델파이/씨빌더에서 암호화 DLL 사용 예제

DLL 작성 : 델파이 5 버전




반응형
Posted by SB패밀리

댓글을 달아 주세요

아래의 과정을 거치는 것 외에 특별한 것은 없음..

클립보드 이미지 데이터 -> 비트맵 -> JPEG






uses 에 Jpeg, ClipBrd 추가해야 함.


procedure SaveClipBoardPicture(ImgPath: String);

var

  Btm: TBitmap;

  Jpg: TJpegImage;


begin  

  Btm:=TBitmap.Create;

  Jpg:=TJpegImage.Create;

  try

      // 1. 클립보드 -> 비트맵

      Btm.Assign(ClipBoard);

      // 2. 비트맵 -> JPEG

      Jpg.Assign(Btm);


      // 압축퀄리티 설정

      Jpg.CompressionQuality:=50;

      // 파일로 저장

      Jpg.SaveToFile(ImgPath);

  finally

    FreeAndNil(Jpg);

    FreeAndNil(Btm);

  end;

end;

반응형
Posted by SB패밀리

댓글을 달아 주세요

Delphi7에서 GIF 파일을 핸들링하는 법에 대해 간단히 포스팅해보겠습니다.

 

먼저 Rx Library가 같이 설치된 상태라고 가정하고 진행하겠습니다.

(RX Library - http://sourceforge.net/projects/rxlib/ )

 

가장 먼저 할일은 사용할 파일을 use에 아래와 같이 넣어줍니다.

 

view plaincopy to clipboardprint?

uses Animate, GIFCtrl;   

 

다음으로는 객체를 생성해야 겠죠. 여기서는 동적으로 생성

(폼을 사용하지 않고 생성하는 법에 대해 기술하겠습니다)

 

 

view plaincopy to clipboardprint?

GIFtest := TRxGIFAnimator.Create(ParentImage);  

with GIFtest do  

begin  

    Parent := ParentImage;  

    AutoSize := True;  

    Left := 0;  

    Top := 0;  

    Animate := False;  

    Visible := True;  

    Image.LoadFromFile('C:\test.gif');  

end;  

 

위와 같이 객체를 생성해주는 부분에서

객체를 생성하고 부모와 좌표를 적당히 설정하면 끝!

 

그리고 애니메이션이 필요한 경우에는  Animate속성을 True로 설정하면 됩니다.


팁 출처: 인터넷



반응형
Posted by SB패밀리

댓글을 달아 주세요

delphi TPanel or TForm 을 투명하게



procedure TForm1.Button1Click(Sender: TObject);
begin
ClearPanel(TPanel(panel1));//전달인수를 폼으로 하면 폼또한 투명효과를 줄 수 있다. 
end;

procedure TForm1.ClearPanel(var panel : TPanel);
var  I : Integer;
    FullRgn, ClientRgn, ControlRgn : THandle;
    Margin, MarginX, MarginY, X, Y : Integer; 
begin 
    Margin := (panel.Width - panel.ClientWidth) div 2; 
    FullRgn := CreateRectRgn(0, 0, panel.Width, panel.Height); 
    MarginX := Margin; 
    MarginY := panel.Height - panel.ClientHeight - Margin; 
    ClientRgn := CreateRectRgn(MarginX, MarginY, MarginX + panel.ClientWidth, 
                                                 MarginY + panel.ClientHeight); 
    CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF); 
    for I:=0 to panel.ControlCount-1 do begin 
        X := MarginX + panel.Controls[I].Left; 
        Y := MarginY + panel.Controls[I].Top; 
        ControlRgn := CreateRectRgn(X, Y, X + panel.Controls[I].Width, 
                                          Y + panel.Controls[I].Height); 
        CombineRgn(FullRgn, FullRgn, ControlRgn, RGN_OR); 
    end; 
    SetWindowRgn(panel.Handle, FullRgn, True); 
end;


반응형
Posted by SB패밀리

댓글을 달아 주세요

TList의 활용.

많은 데이터들을 관리하기 위해서는 리스트를 사용해야 한다.

C++과는 다르게 델파이는 TList라는 클래스가 이를 도와준다.

실제로 TList는 다른 비슷한 기능의 부모 클래스이기도 하다.

일단 데이터를 관리하기 위해서 따로 유닛을 만들어 관리하는 것이 편리하다. 폼의 중간에 던져 놓으면 참 보기 힘들다.

기본 뼈대를 먼저 만들어보자.

unit uMyDataList;
 
interface
 
uses classes;
 
type
  TMyDataList = class(TList)
    private
    protected
    public
  end;
 
implementation
 
end.

짠, 이렇게 간단하다.

이제 담은 동적인 데이터의 형식을 만들어여 한다. 왜냐면 TList는 포인터만 가지고 있을 뿐 데이터 자체를 가지지 않는다.
알고보면 당연한 것이다.

  // type 절에 추가된다.
  PMyDataItem = ^TMyDataItem;  // 포인터 형의 데이터 형식을 정의
  TMyDataItem = record         // 데이터 형식의 정의
     value : integer;          // 넣고자 하는 데이터 형식을 넣는다. 임의로 내용을 정의했다.
    offset : integer;
    others : pointer;         
  end;

데이터 형식의 정의에 대해서는 더 설명하지는 않겠다.

데이터들은 동적으로 관리된다.

자, 이제는 데이터를 추가/삽입/삭제을 하는 루틴이 필요하다.

// interface
...
type
  TMyDataList = class(TList)
    private
    protected
      function GetItem(Index : integer):PMyDataItem;
      procedure SetItem(Index : integer; Item : PMyDataItem);
    public
      // destructor
      // destructor Destroy; override; // 소멸자
      // functions
     function AddItem(Value, offset : integer; others : pointer):integer; // 데이터 추가
      procedure InsertItem(Index : integer; Value, offset : integer; others : pointer); // 데이터 삽입
      procedure DeleteItem(Index : integer); // 데이터 삭제
      procedure Clear; override; // 리스트를 모두 삭제
      //
      property ItemList[Index : integer]:PMyDataItem read GetItem write SetItem; // 해당 데이터이 포인터를 가져온다
  end;
...

아쉽게도 override를 할 수 있는 함수가 몇개 없다.

위와 관련된 부모 클래스 TList의 선언은 아래와 같다. 한번 확인해보자.

    // destructor Destroy; override; // 소멸자. TObject에서 상속된다.
    function Add(Item: Pointer): Integer; // 데이터 추가
    procedure Clear; virtual; // 데이터를 모두 삭제
    procedure Delete(Index: Integer); // 데이터를 삭제
    procedure Insert(Index: Integer; Item: Pointer); // 데이터 삽입
    property Items[Index: Integer]: Pointer read Get write Put; default; // 데이터의 포인터를 가져온다.

정렬과 같은 기능도 있으나 그냥 생략하기로 하겠다.

사실 데이터의 포인터를 가져오는 것은 필요가 없을수도 있다.

type이 없는 Pointer는 다른 type을 가지는 pointer에 타입캐스팅없이 바로 대입이 된다.

먼저 데이터를 추가/삽입하는 부분을 만들어보자.

implementation
...
function TMyDataList.AddItem(Value, offset : integer; others : pointer):integer; // 데이터 추가
var
  NewItem : PMyDataItem; // 동적 생성을 위한 포인터형 변수를 선언.
begin
  result := -1; //  되돌림값 초기 설정. 되돌값은 새로이 추가된 데이터의 인덱스를 되돌린다.
  New(NewItem); // 동적 데이터 생성
  if NewItem<;>;nil then
  try
    // 데이터의 대입.
    NewItem.Value := Value;
    NewItem.offset := offset;
    NewItem.others := others;
    // 리스트에 추가
     result := Add(NewItem);
  except
    // 에러가 나면 추가 작업을 포기한다. 
    // 이미 동적 데이터를 생성했으므로 추가가 실패한 경우에는 생성한 동적 데이터를 없앤다.
    Dispose(NewItem);
  end;
end;
...
procedure TMyDataList.InsertItem(Index : integer; Value, offset : integer; others : pointer); // 데이터 삽입
var
  NewItem : PMyDataItem; // 동적 생성을 위한 포인터형 변수를 선언.
begin
  New(NewItem); // 동적 데이터 생성
  if NewItem<;>;nil then
  try
    // 데이터의 대입.
    NewItem.Value := Value;
    NewItem.offset := offset;
    NewItem.others := others;
    // 리스트에 삽입
     Insert(Index, NewItem);
  except
    // 에러가 나면 삽입 작업을 포기한다. 
    // 이미 동적 데이터를 생성했으므로 삽입이 실패한 경우에는 생성한 동적 데이터를 없앤다.
    Dispose(NewItem);
  end;
end;

New/Dispose는 같이 동적 변수를 생성시키는데 사용한다. 다르게 GetMem/FreeMem을 이용해도 된다.

동적 변수를 생성하고 그 변수의 값을 할당시키는 것으로 함수는 끝난다.

거의 일어날 가능성이 없지만 도중에 예외가 발생하면 동적 변수를 해제하도록 만드는게 좋다.

하지만 string이나 인터페이스 등등이 있는 경우에는 Getmem/Freemem은 사용하지 않는게 좋다.

삽입과 추가는 별로 다르지 않다.

이제는 데이터의 참조하는 프로퍼티(property)를 작성해보자.

interface
...
      property ItemList[Index : integer]:PMyDataItem read GetItem write SetItem; // 해당 데이터이 포인터를 가져온다
      // 이 선언의 의미는 간단하다. 
     // 배열형식으로 접근할 수 있는 데이터의 인덱스는 integer형이며 PMyDataItem이 얻어지며,
     // GetItem 함수로 읽고, SetItem 프로시져로 쓴다는 의미이다.
     // 꼭 선언한 필요는 없지만, 편하게 클래스를 사용하기 위해서는 선언해주는 것이 좋다.
...
implementation
...
// 데이터 포인터를 읽어온다.
function TMyDataList.GetItem(Index : integer):PMyDataItem;
begin
  result := PMyDataItem(Items[Index]);
end;
// 데이터 포인터를 새로운 값으로 써넣는다.
procedure TMyDataList.SetItem(Index : integer; Item : PMyDataItem);
begin
  Items[Index] := Item;
end;
...

아주 간단하다. 그냥 타입 캐스팅과 대입만 하면 끝이다.

파스칼은 형식에 민감해서 포인터를 다룰 때도 이러한 고생이 조금 따르지만,

몇자 더 써넣는다고 손가락이 부러지는 것은 아니라고 생각된다.

이제는 데이터를 삭제할 부분을 만들어보자.

...
procedure TMyDataList.DeleteItem(Index : integer); // 데이터 삭제
var
  Item : PMyDataItem;
begin
  // 데이터를 가져온다
  Item := ItemList[Index];
  // 동적 생성된 변수를 해제한다.
  if Item<;>;nil then begin
    try
      // others는 포인터로 다른 동적 데이터를 담을려고 포인터로 선언한 것이다. 
      // 만약 다른 용도이거나 일반 변수라면 해제할 필요가 없다.
      // 단지 동적 변수 안에 동적 변수를 관리하는 방법을 보여주기 위해 선언한 것 뿐이다.
      if Item.others<;>;nil then Dispose(Item.others);
    except
    end;
    // 동적 변수를 해제한다. 
    // 이후에 리스트에 담긴 ItemList[Index] 포인터는 의미없는 값이 된다.
    dispose(Item);
  end;
  // 리스트에 동적 변수를 가리키는 포인터를 삭제한다.
  // 필요에 따라 ItemList[Index] := nil; 을 부가적으로 넣어도 된다.
  Delete(Index);
end;
...

삭제를 하는 경우에는 생성된 동적 변수의 해제가 필요하다. 그렇지 않으면 메모리에 계속 남아있게 된다.

마지막으로 객체가 파괴되거나 리스트 내용을 모두 삭제할 때 필요한 Clear 프로시저를 만든다.

TList의 소멸자 Destroy는 Clear를 호출한다. 그래서 따로 소멸자를 선언하지 않았다.

...
procedure TMyDataList.Clear; // 리스트를 모두 삭제
var
  Index : integer; // 루프를 위해 선언
  Item : PMyDataItem;
begin
  if Count>;0 then
    for Index:=0 to Count-1 do begin
      Item := ItemList[Index];
      if Item<;>;nil then begin
        try
          // others는 포인터로 다른 동적 데이터를 담을려고 포인터로 선언한 것이다. 
          // 만약 다른 용도이거나 일반 변수라면 해제할 필요가 없다.
          // 단지 동적 변수 안에 동적 변수를 관리하는 방법을 보여주기 위해 선언한 것 뿐이다.
          if Item.others<;>;nil then Dispose(Item.others);
        except
        end;
        // 동적 변수를 해제한다. 
        // 이후에 리스트에 담긴 ItemList[Index] 포인터는 의미없는 값이 된다.
        dispose(Item);
      end;
    end;
  // 부모 클래스의 Clear를 호출한다.
  inherited Clear;
end;
...

Clear 프로시저는 Delete와 마찬가지로 간단하다.

다른 점이라면 루프를 돌면서 각각의 데이터를 해제시킨 후 부모 클래스의 Clear를 호출한다는 점이다.

DeleteItem을 호출해서 해결할 수도 있지만 오버헤드(overhead)를 줄이기 위해 그냥 직접 구현을 했다.

실제로 이 클래스를 사용하면 아래와 같이 할 수 있다.

...
var
  MyOwnList : TMyDataList;
...
  MyOwnList := TMyDataList.Create;
  ...
  MyOwnList.AddItem(10,20,nil);
  MyOwnList.InsertItem(0,10,20,nil);
  MyOwnList.DeleteItem(1);
  Writeln(MyOwnList.ItemList[0].Value);
  ...
  MyOwnList.Free;
...

검색의 구현을 위해서는 루프를 돌려 해당값을 비교하게 만들면 된다.

이로써 간단히 TList를 사용해서 자신만의 데이터들을 담는 리스트를 사용할 수 있게 되었다.

보다 많은 기능들의 구현은 좀 더 깊이 연구하면 직접할 수 있을 것이다.

말주변이 없는 글이지만 도움이 되었기를.



출처: http://blog.naver.com/PostView.nhn?blogId=barcoder&logNo=60053164009


반응형
Posted by SB패밀리

댓글을 달아 주세요





Borland Delphi 5로 개발된 암호화 DLL

문자열을 암호화 하고 해독하는 함수

Readme.txt : 지금 보고 있는 텍스트 파일
cccipher.dll : 암호화/해독 함수가 포함된 DLL

[델파이에서 선언]
Function Encrypt(Src: PChar; Key: Word): PChar; stdcall; External 'CCCIPHER.DLL';
Function Decrypt(Src: PChar; Key: Word): PChar; stdcall; External 'CCCIPHER.DLL';

[델파이에서 사용]
// encipher
Edit2.Text := StrPas(Encrypt(PChar(Edit1.Text), StrToInt(Edit5.Text)));
// decipher
Edit4.Text := StrPas( Decrypt( PChar(Edit3.Text), StrToInt(Edit5.Text) ) );

※ C++Builder 5 예제도 포함되어 있음.

Base64 인코딩/디코딩 된 결과물을 볼 수 있음.
사용에 버그가 있거나 문의사항이 있을 경우에 연락을 주시면 감사하겠습니다. 
homepage: http://sb.pe.kr 

암호화DLL테스트.ZIP


좋은 목적을 위해서라면 아무나 쓰셔도 상관 없습니다.

- 쌈꼬쪼려 소백촌닭 -




반응형
Posted by SB패밀리

댓글을 달아 주세요