Quantcast
Channel: Tips, Tricks and Techniques - Embarcadero Community
Viewing all 182 articles
Browse latest View live

Deutscher Computerspielpreis / Delphi Games

$
0
0

Delphi (und natürlich auch der C++Builder) eignen sich ja auch hervorragend zum Entwicklen von Spielen. So sind doch schon einige Spiele oder Game-Engines in Delphi geschrieben und lassen sich gut erweitern oder als Idee aufnehmen. Das kann man als Hobby betreiben, oder auch einfach mal so testen.

Einige Beispiele von mit Delphi erstellten Spielen / Erweiterungen:

Das ist doch schonmal ein Anfang.

Vorstellen möchte ich hier den "Deutschen Computerspielpreis", bei dem es immerhin einiges zu gewinnen gibt. Die Gesamtsumme der ausgesetzten Preisgelder ist mittlerweile auf 550.000 EUR angewachsen. Vielleicht ein Grund sich mal mit Delphi und der Spieleprogrammierung zu beschäftigen. Auch wenn das bis zum Datum der letzten Einreichung etwas knapp werden könnte, wenn man noch nichts gemacht hat :-) (Bewerbungsschluß: 27. Januar 2017)

Die Einreichung für den Deutschen Computerspielpreis sind natürlich kostenlos. Es können auch Konzepte und Prototypen eingereicht werden. 


Inspect request and responce data between RADServer and client by mitmproxy. [JAPAN]

$
0
0

Delphi / C++Builderアプリケーション向けのフルセットバックエンドソリューションであるRAD Serverはクライアントとの通信をHTTPやHTTPSで行いますが、EMSFireDACClient のようなコンポーネントを使えば通信内容を細かく意識することなしに実装が行えます。

しかし、実際に行われているデータのやり取りを理解しておくことは、WebAPI の実装では大切だと思います。

そこで mitmproxy というプロキシサーバを使って通信内容を調べる方法を簡単に説明します。

【C++Builder Starter チュートリアルシリーズ】 シーズン2 第2回 ‟変数と型„ [JAPAN]

$
0
0

【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第1回 ‟変数と型„ [JAPAN]

C++Builder Starter Edition シーズン2 第2回 ‟変数と型„

2017年1月23日より 「Delphi / C++Builder Starter チュートリアルシリーズ」 シーズン2、全9回、3月27日まで、毎週月曜日、Delphiパートが 17時00分~17時20分、 リアルタイム放送スペシャルコンテンツが5分~10分、
C++Builderパートが 17時30分~17時50分の時間割でお送りしています。

無料でダウンロード&利用できる開発環境のDelphi / C++Builder Starter エディションを使用して、プログラミング言語のDelphi (Object Pascal ), C++の基礎を学ぶオンラインセッションです。

https://community.embarcadero.com/blogs/entry/2-japan

Neue, deutschsprachige Webinare im Februar

$
0
0

Im Februar gibt es wieder neue, deutschsprachige Webinare

  • Tipps und Tricks zu Delphi
    Delphi hat eine Vielzahl von Tools rund um die IDE und etliche Erweiterungen in der IDE, die vielen (oder zumindest einigen) unbekannt sind. 
    Dieses Webinar zeigt die Tools, Produktivitätserweiterungen und Tipps & Tricks für Delphi 10.1 Berlin
    Donnerstag, 16. Februar 2017 10:00 MEZ / Sprecher: Matthias Eißing
  • MVVM Anwendungen mit Delphi
    Das Model View ViewModel (MVVM) ist ein Entwurfsmuster für Anwendungen, welches eine strikte Trennung zwischen der View (die Benutzeroberfläche) und dem Model (den Daten und der zugehörigen Business-Logik) ermöglicht.
    In diesem Webinar werden Sie einen Überblick über das MVVM Entwurfmuster erhalten. Es werden die wichtigsten Konzepte und deren Vorteile demonstriert, wie man MVVM Anwendungen mit Delphi entwerfen kann ohne dabei die bekannten, sehr effizienten Mechanismen von Delphi über Bord werfen zu müssen.
    Donnerstag, 23. Februar 2017 10:00 MEZ / Sprecher: Olaf Monien, Developer Experts
  • Synchronisation - das Nadelöhr der parallelen Programmierung
    Nichts zuletzt Dank der PPL (Parallel Programming Library) von Delphi wird die Verwendung von Threads für mehr und mehr Entwickler greifbar und damit Teil Ihrer täglichen Arbeitswelt. Ein paar Zeilen sind schnell getippt, ein paar Codeblöcke schnell parallel zueinander ausgeführt. Was aber, wenn plötzlich gemeinsam genutzte Ressourcen wie Objekte, Records oder einfache Variable im Spiel sind? Was gibt es da zu beachten? Ein paar Stichworte geistern immer wieder herum: CriticalSection, Semaphore, Mutex, Monitor, Event sowie die sog. “Interlocked”-Funktionen - gibt’s da Unterschiede? Und wenn ja, wann nimmt man da eigentlich was?
    Dieses Webinar soll den Teilnehmern einen Überblick über Synchronisations-Mechanismen verschaffen und ihnen so den Weg zu souveränen Design-Entscheidung im eigenen Arbeitsalltag ebnen.
    Donnerstag, 23. Februar 201715:00 MEZ / Sprecher: Daniel Wolf, www.delphipraxis.net

Dauer jeweils ca 45 Minuten + 15 Minuten Fragen & Antworten

(Anmeldung über den Link hinter dem Datum)

The Stack Overflow developer survey closes in a couple of days!

$
0
0

Every year, Stack Overflow runs a developer survey, and the 2017 survey closes on February 6th - only four days!

If you're a Stack Overflow member, you might want to fill it out.  It's a standard SurveyMonkey survey and doesn't take too long to answer.  Here's their blog post about it, and a link to the survey itself.

Notably absent from the IDEs, languages, and libraries are Delphi and C++Builder and libraries like the VCL and FMX.  They have a write-in option for all these questions.

This is odd - last year, for example, Delphi was the most popular write-in Popular Technologies option, and that's happened in the past too; I'm not sure why that doesn't promote it to being a selectable option the following year. Not to mention how Delphi is trending up so it's currently the #11 language. Nevertheless, if you love Delphi and C++Builder, the VCL, FireDAC, or FMX, you can write them in.

Fill out the Stack Overflow developer survey

C++Builder: Paralleles Scrollen von Memos (TMemo) in FireMonkey mit der ViewportPosition

$
0
0

In früheren C++Builder/Delphi Versionen hat man innerhalb von FireMonkey ein paralleles Scrollen von ListBoxen (oder anderen, visuellen Komponenten) zumeist über die Position der Scrollbars erreichen können.

Ein kleines Video dazu:


[YoutubeButton url='https://youtu.be/zrJnNyYQ-ig']

Dazu eine eigene Klasse definiert, um die Werte der horizontalen und vertikalen Scrollbar zu bekommen):

class MyMemo : public TMemo
{
 private:
  float gHScrollBarValue() {return HScrollBar->Value;}
  float gVScrollBarValue() {return VScrollBar->Value;}
  void sHScrollBarValue(float value) {HScrollBar->Value=value;}
  void sVScrollBarValue(float value) {VScrollBar->Value=value;}

 public:
  MyMemo(TForm *form):TMemo(form) {}

  float getHScrollBarValue() {return gHScrollBarValue();}
  float getVScrollBarValue() {return gVScrollBarValue();}
  void setHScrollBarValue(float value) {sHScrollBarValue(value);}
  void setVScrollBarValue(float value) {sVScrollBarValue(value);}
};

Und die passenden Methoden definiert (hier am Beispiel von 2 GUI TMemo Komponenten, die sich gegenseitig scrollen sollen. Berücksichtig werden dabei ScrollBar (Horizontal/Vertikal), MouseWheel Events (H/V), wie auch Tastatur-Events (H/V):

void __fastcall TForm5::MyScrollBarHChangeMemo1(TObject *Sender)
{
 myMemo2->setHScrollBarValue(myMemo1->getHScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyScrollBarVChangeMemo1(TObject *Sender)
{
 myMemo2->setVScrollBarValue(myMemo1->getVScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyScrollBarHChangeMemo2(TObject *Sender)
{
 myMemo1->setHScrollBarValue(myMemo2->getHScrollBarValue());
}

//------------------------------------------------------------------------------

 void __fastcall TForm5::MyScrollBarVChangeMemo2(TObject *Sender)
{
 myMemo1->setVScrollBarValue(myMemo2->getVScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyMouseWheel1(TObject *Sender, TShiftState Shift, int WheelDelta, bool &Handled)
{
 myMemo2->setHScrollBarValue(myMemo1->getHScrollBarValue());
 myMemo2->setVScrollBarValue(myMemo1->getVScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyMouseWheel2(TObject *Sender, TShiftState Shift, int WheelDelta, bool &Handled)
{
 myMemo1->setHScrollBarValue(myMemo2->getHScrollBarValue());
 myMemo1->setVScrollBarValue(myMemo2->getVScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MemoKeyDown1(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift)
{
 myMemo2->setHScrollBarValue(myMemo1->getHScrollBarValue());
 myMemo2->setVScrollBarValue(myMemo1->getVScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MemoKeyDown2(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift)
{
 myMemo1->setHScrollBarValue(myMemo2->getHScrollBarValue());
 myMemo1->setVScrollBarValue(myMemo2->getVScrollBarValue());
}

Jetzt gibt es nur ein kleines Problem: In C++Builder 10.1 Berlin hat ein TMemo keine HScrollBar/VScrollBar mehr.

Die gute Nachricht ist, daß man das leicht umstellen kann. Jedes visuelle GUI Element, welches Scrollbars darstellen kann, kennt einen "ViewportPosition", der X- und Y-Positionen zur Verfügung stellt (TPointF)... dadurch wird der Quelltext auch einfacher und übersichtlicher:

NEU:

class MyMemo : public TMemo
{
 private:
  System::Types::TPointF gScrollBarValue() {return ViewportPosition;}
  void sScrollBarValue(System::Types::TPointF value) {ViewportPosition=value;}


 public:
  MyMemo(TForm *form):TMemo(form) {}

  System::Types::TPointF getScrollBarValue() {return gScrollBarValue();}
  void setScrollBarValue(System::Types::TPointF value) {sScrollBarValue(value);}

};

Und die Methoden (auch wieder für Tastatur, Maus und Scrollbar-Events):

void __fastcall TForm5::MyScrollBarChangeMemo1(TObject *Sender, const TPointF &OldViewportPosition, const TPointF &NewViewportPosition, const bool ContentSizeChanged)
{
 myMemo2->setScrollBarValue(myMemo1->getScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyScrollBarChangeMemo2(TObject *Sender, const TPointF &OldViewportPosition, const TPointF &NewViewportPosition, const bool ContentSizeChanged)
{
 myMemo1->setScrollBarValue(myMemo2->getScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyMouseWheel1(TObject *Sender, TShiftState Shift, int WheelDelta, bool &Handled)
{
 myMemo2->setScrollBarValue(myMemo1->getScrollBarValue());

}

//------------------------------------------------------------------------------

void __fastcall TForm5::MyMouseWheel2(TObject *Sender, TShiftState Shift, int WheelDelta, bool &Handled)
{
 myMemo1->setScrollBarValue(myMemo2->getScrollBarValue());
}

//------------------------------------------------------------------------------

void __fastcall TForm5::MemoKeyDown1(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift)
{
 myMemo2->setScrollBarValue(myMemo1->getScrollBarValue());

}

//------------------------------------------------------------------------------

void __fastcall TForm5::MemoKeyDown2(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift)
{
 myMemo1->setScrollBarValue(myMemo2->getScrollBarValue());
}

Beispielanwendung (Source, C++Builder 10.1 Berlin) hier:

ScrollDemoViewPort

Using Delphi to get OS version, device name, language on iOS/Android

$
0
0

This is translated blog. Original my Japanese document is on Qiita (Japanese engineer community to share useful technical information) http://qiita.com/kazinoue/items/82b7a4d8e563f8ed3a74

When I wish to get OS version and device name for iOS and Android in same project, some part will seems platform dependent.

This is sample for my imprementation.

Android Wear Smartwatch, iOS Smartphone und Lokationsdienste

$
0
0

Seit einigen Tagen gibt es Android Wear (die Companion-App) für iOS in einer neuen "2er" Version. Auch wenn diese Version (aktuell 2.1) noch durchaus Potenzial nach oben hat (falsche/fehlende Übersetzungen, "Google Feed" geht zum Teil (zum großen Teil) gar nicht.....).

Hintergrund: Ich selbst nutze ja eine Android Wear Watch (Sony Smartwatch 3) mit iOS (iPhone).... aus vielen Gründen finde ich diese Kombination ganz ausgezeichnet: Die Batterie (ein leidiges Thema bei Smartwatches) hält durchaus mal 2 bis 3 Tage (auch noch länger, wenn man diese Nachts ausschaltet); ich bekomme alle Notifications; und das spezifische Modell hat einen normalen USB (Micro) Anschluss zum aufladen. Speziell zur Sony Smartwatch sei allerdings gesagt: Wahrscheinlich wird diese kein Update auf Android Wear 2.0 bekommen (das OS auf der Smartwatch selbst; nicht die Version der App für iOS).

Warum jetzt dieser Blog-Eintrag: Mit Android Wear 2.x auf dem iOS Gerät bekommt man mittlerweile die GPS Koordinaten vom Smartphone (iOS) geliefert, so daß man auch leicht eine GPS-basierte App für Android Wear erstellen kann.

Hier ein kurzes, exemplarisches Beispiel:

  • Eine leere, plattformübergreifende Anwendung
  • Eine Toolbar/Label, ein LocationSensor und ein MapView
  • LocationSensor direkt auf aktiv (Achtung: Batterie :-)
  • MapView auf Zoomstufe 18 ("Häuserblock" Größe) und einige Layers hinzugefügt:

 

Für die Android Smartwatch 3 gibt es für die spezifische Ansicht eigentlich nichts weiter einzustellen :-)

Programmiert ist die Ereignisbehandlungsroutine vom LocationSensor:

procedure TForm1.LocationSensor1LocationChanged(Sender: TObject;
  const OldLocation, NewLocation: TLocationCoord2D);
begin
  MapView1.Location := TMapCoordinate.Create(NewLocation.Latitude,NewLocation.Longitude);
end;

Die Smartwatch erscheint auch direkt in der Projektverwaltung, wenn man das ADB Debugging auf der Smartwatch eingeschaltet hat:

Da es sich um eine Android-App handelt, muss man noch zwei Einstellungen machen (Projekt - Optionen):

  • Berechtigungsliste: [X] Kartendienst 
  • Versionsinformationen: apiKey angeben (dazu in einem anderen Blogeintrag mal mehr)

Ab da kann man die Anwendung schon starten (die Sony Smartwatch hat ein eckiges Display): Nach einiger Zeit erscheint die richtige :-) Position (Embarcadero Germany, Langen).

      


Dave's Coding Roundup #3

$
0
0

Interesting programming things that I think other might also like to read - third edition!

  • The next big blue-collar job is coding - "[The Zuckerberg-like] Silicon Valley stereotype isn’t even geographically accurate. The Valley employs only 8 percent of the nation’s coders. All the other millions? They’re more like Devon, a programmer I met who helps maintain a ­security-software service in Portland, Oregon. He isn’t going to get fabulously rich, but his job is stable and rewarding: It’s 40 hours a week, well paid, and intellectually challenging. “My dad was a blue-­collar guy,” he tells me—and in many ways, Devon is too."

    I found this an interesting look at programming as a career. The idea of a "normal" job is shifting, rapidly, as are the people who work. But has our perception of a programming job, and that job's place in society, caught up?

  • Marco celebrated 22 years of Delphi and it got to the #2 spot on Hacker News.

  • Flexible Extension of C++ Template Libraries: an interesting read on mixing C++ with CUDA, and a design approach.

  • I've been reading The Digital Antiquarian recently: a fascinating blog series about historical computer games.

  • Drawing Lines is Hard: this isn't about normal line drawing, eg Bresenham's algorithm, but instead is the problems with drawing lines in OpenGL. (FireMonkey does this, and does a good job, I believe.) An interesting read, and really cool in that it demonstrates each technique in WebGL live in the webpage.

  • The latest mailing of proposals for the C++ standards committee meeting they'll look at in Hawaii

  • Have you seen this preview about a menu change in 10.2?  We've historically been very conservative making UI changes; this one is small but, depending on how it's met by the community, may indicate how likely we are to change (improve!) things in future.

That's it for today! We're working hard on getting 10.2 out.  Soon :)

Delphi / C++Builder RS232cコンポーネント MITライセンス配布版[JAPAN]

$
0
0

以前刷新セミナーでご紹介したRS232C(COM)用コンポーネントがWindows限定(WUNI232c)でMITライセンスで配布されています。

 

URL http://www.csd.co.jp/uni232c/

[特徴]

・Android様の各社用の232cドライバーを作成しなくても良い。
現在、FTDI/Prolific/SILICON LABS 232/南京沁恒电子有限公司(CH340)、mbed1768、USB CDC で動作いたしますが、確認の上、御使用ください。
(OEM版の対応は非対応)
・AndroidもWindowsも同一コードで動作。
・Windows上で動作を簡易確認できる。
・Androidでも動作可能。

(Android版は© CSD Co., Ltd. 様の有償コンポーネントです)

 

 


[YoutubeButton url='https://www.youtube.com/watch?v=RDW9FWJMQ6M&feature=youtu.be']

第15回 RAD Studio勉強会@Osaka 2017年3月3日(金) 開催 [JAPAN]

$
0
0

コミュニティ「RAD Studio勉強会@Osaka」さんによる 「第15回 RAD Studio勉強会@Osaka (Delphi / C++Builder)」が開催されます。

Delphi / C++Builderの勉強会です。Delphiを使用したVRで有名なフォーラムエイト様での開催です。Delphi / C++Builder の好きな人達が集まる地域コミュニティです!どなたでも参加することが出来ます。


[YoutubeButton url='https://youtu.be/cTfXZTPe13U']
 
今回の下記の2つのセッションで構成なされるそうです。
■フォーラムエイトさんによるセッション
  • 当社でのDelphi採用の経緯
  • 自社コンポーネントを使用した開発
  • 当社でのソースコード管理

フォーラムエイトさんはエムキャス対応番組「パックン河北麻友子のあつまれ! VRフレンズ」も放送されております。

■Delphi 10 Starter Edition を使用した Delphi開発入門ハンズオン
 
チュートリアルシリーズ シーズン1で実施した内容を 元にしたハンズオンを実施していただけるとのこと。楽しみです!
 
 
■詳細、および、参加お申し込みはこちらのWebから

 

Shuffling playing cards with Delphi خلط كروت اللعب بالدلفي

$
0
0

هذا جزء فقط من مشروع عبارة عن محاكي للعبة الورق Simulator. الغاية من البرنامج هو معرفة ما قد يحدث لنتائج لعبة اذا تم تغيير قوانين اللعبة . ما هي احتمالات الخسارة والربح. وما هي عددها . وكم نسبتها . هذا البرنامج مهمته اعطائنا نظرة مستقبلية وقدرة على تغيير قواعد اللعبة ومقارنة النتائج .

اول مهمة في المشروع هي خلط الأوراق . بالطبع خلط الأوراق يعتمد على العشوائية . لكن الرقم العشوائي الذي ينتجه الحاسب في الحقيقة ليس إلى ناتج عملية حسابة وهذا ما يجعله ليس عشوائيا ابدا ولا يناسب نهائيا مثل هذا النوع من التطبيقات . لذلك اصبحت المهمة الاولى هي انتاج ارقام عشوائية واقعية وهذا ما يدعى True Random Number
لتحقيق هذا كان من الواضح اننا بحاجة لدخال عامل طبيعي خارجي في عملية استنتاج هذه الارقام العشوائية 
كان الاختيار الاول هو الضجيج باستخدام arduino ولكن مع الاسف لسبب تقني ( عطل في المايكرفون ) لم استطع الحصول على نتائج جيدة .
الخيار الثاني هو الحصول على العشوائية من محاور الهاتف الجوال . الفكرة تعتمد على قراءة ميول هذه المحاول اثناء الحركة وتسجيلها ضمن قاعدة بيانات لاستخدامها لاحقا


المرحلة الاولى : 


DataSnap Server داتاسناب السيرفر :

Server-Datasnap

 

 

وضعت اجراء واحد ودالة واحدة  الاول هو NumberToDataBase و مهمته دمج القيمة القادمة عبر البرمتر ( Values ) بعبارة insert وتنفيذها . اما الدالة فيه فقط تعدي عدد الارقام العشوائية التي تم تسجيلها في قاعدة البيانات. ( label3 ) هي لعمل debuging ومتابعت لا اكثر 



DataSnap Client داتاسناب الكلاينت :

الفكرة تعتمد على ابقى البرنامج مفتوح والتجول والتحرك وقراءة محاول ميول الهاتف واخد اخر ثلاث خانات . ( ثلاث خانات لاني احتاج لعدد عشوائي كبير لضرورات محاكي اللعبة لانه هناك احتمال ليكون عدد مجموعات الكروت اكثر من واحد .


MotionSenser1 : هو المكون TMotıonSenser الذي يعيد ميول محاور الهاتف الثلاثة

ولانه ليس من المنطقي ارسال كل رقم عشوائي لوحده لداتاسناب سيرفر واشغال الشبكة ومحرك قاعدة البيانات . قمت بارسال كل 100 رقم عشوائي مع بعض بعد تجهيزها للإضافة مباشرة في عبارة insert .

وهذا هو كامل الكود . ( الكود ليس متقن لسبب ان هذا البرنامج لن يتم استخدامه مرة اخرى ).

 

 

بقي فقط ان اقوم بتنفيذ برنامج داتاسناب سيرفر وبرنامج الموبايل واتجول واتحرك :)

 


المرحلة الثانية :



بعد الحصول على الكم الهائل من الارقام الحقيقية العشوائية محصورة بين 0 و 999 . تاتي المرحلة الثانية وهي عملية خلط الكروت shuffling .
الفكرة تعتمد على اعتماد ترقيم متسلسل للكروت من 1 حتى 52 . للمجموعة Deck الاولى و من 53 حتى نهاية الكروت في حال كان هناك اكثر من مجموعة مستخدمة .
كبداية قمت برسم الكروت وتوضعها في ImageList .

كبداية قمت بتحضير كلاس خاص لعرض كرت اللعب . مشتق من TRectangle . ( كان يمكن استخدام TImage .. )

ImageLit : لتحديد مكون ImageList الذي يحتوي على صور الكروت كلها.
ImageIndex : هو رقم الكرت محصور بين 1 و 52 .
Facing : خاصية لتحديد اذا كان الكرت سيظهر مقلوب أم على الوجه . 

ولمعرفة رقم الكرت من الرقم العشوائي. سنقوم بترقيم الكروت المستخدمة ( قد تكون اكثر من مجموعة deck )  ابتداءا من 1 وحتى اخر كرت . اما معرفة imageindex من اصل 52 صورة نقوم بحساب وفق المعادلة :


(RandomNo % ((52*' + inttostr(Decks) + ') - rownumber + 1)) 

تم حسابها مباشرة من الكوري وليس من التطبيق عند جلب الارقام العشوائية من قاعدة البيانات . فلا داعي لحسابها ضمن التطبيق.

اصبح عندنا كل ارقام الكروت حقيقية العشوائية . الان سنحتاج ل array عدد 2 الاولى  SortedCards فيها كل أرقام الكروت مرتبة والثانية shuffledCards سيتم نقل إليها العناصر من المصفوفة الأولى. لتشكيل المصفوفة النهائية التي تحتوي على كل الكروت حقيقية العشوائية. ( قد لا نحتاج المصفوفات في هذه المرحلة . لكن المشروع لم ينتهي بعد وهذه المصفوفات لها استخدام مستقبلي ).



واخيرا يبقى اظهار النتائج للمستخدم . يكفي انشاء Tcard بعدد عناصر المصفوفة ShuffledCards . واضافة مؤثر لعرض حركة لقلب الكرت لكلاس tcards.

 



وهذه هي النتيجة حتى الان .. فالعمل لم ينتهي بعد .

InterBase 2017/Linux und Delphi/Linux (Vorschau)

$
0
0

Da seit heute InterBase 2017 verfügbar ist, und Delphi für Linux ja demnächst verfügbar sein wird, habe ich diese Kombination mal installiert.

Genutzt habe ich dafür ein Ubuntu 16.04.2

Zuerst die Installationsdatei nach Linux kopiert und entpackt:

Dann die Installation durchgeführt:

chmod +x install_linux_x86_64.sh

nicht vergessen. Da es sich um eine GUI/XServer-lose Installation handelt, geht das Ganze über die Kommandozeile:

./install_linux_x86_64.sh

Auswahl von 64 Bit / Server und Client sollen installiert werden:

Hier ohne Multi-Instance Möglichkeiten und Abschluss der Installation:

Fertig installiert. Jetzt noch lizenzieren:

Aus /opt/interbase/bin:

./LicenseManagerLauncher -i console

[2] "Direct register" mit Seriennummer

Abschliessend wird der Dienst gestartet mit

./ibmgr -start

InterBase 2017 ist jetzt installiert..... jetzt zum Delphi/Linux Teil:

Hier soll es nur um eine kleine Konsolenanwendung gehen. Praktischerweise kann man ja auch in Konsolenanwendungen Datenmodule verwenden. Das ist schnell zusammengebaut.

  • Neue Delphi, Konsolenanwendung
  • Ein Datenmodul hinzugefügt
  • Eine FDConnection (Name: IBUbuntuConnection) und eine FDTable (Name: FDTableCustomer)
  • Die Connection konfiguriert mit:
    Database: /opt/interbase/examples/employee.gdb
    Username: sysdba / password: masterkey
    Protocol: TCP/IP
    Server: <IP-Adresse des Ubuntu/InterBase Servers>
  • Die FDTable mit Link auf die "CUSTOMER" Tabelle
  • Das Konsolenprogramm:
program IBOnUbuntu;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils,
  DMFireDACInterBase in 'DMFireDACInterBase.pas' {DataModule2: TDataModule};
var
  i: Integer;
  dm: TDataModule2;
begin
  try
    dm := TDataModule2.Create(nil);
    dm.IbUbuntuConnection.Connected := true;
    dm.FDTblCustomer.Active := true;
    for i := 0 to 10 do
    begin
Write(dm.FDTblCustomer.Fields[0].AsString + #9);
      Write(dm.FDTblCustomer.Fields[1].AsString + #9);
      Writeln(dm.FDTblCustomer.Fields[2].AsString);
      dm.FDTblCustomer.Next;
    end;
    { TODO -oUser -cConsole Main : Code hier einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  readln;
end.

Das Programm lässt sich sofort (keine weitere "Client-Installation von Datenbanktreibereien" auf der Linux-Server-Seite) starten :-)

 

Embarcadero Roadshow: Leipzig, München, Berlin und Stuttgart

$
0
0

Wir sind wieder für Sie unterwegs und freuen uns, wenn Sie sich die Zeit nehmen, um das Neueste über RAD Studio und Embarcadero zu erfahren. 

Das neue Release von RAD Studio Tokyo mit Delphi für Linux steht kurz vor der Auslieferung. Erfahren Sie, was die aktuelle und die kommende Version alles bietet. Es erwartet Sie ein Tag prall gefüllt mit Präsentationen zu unseren Produkten, den Neuigkeiten sowie Tipps & Tricks, wie Sie mit RAD Studio noch schneller und effektiver Ihre Anwendungen schreiben können. Nutzen Sie die Gelegenheit, um in den Pausen Ihre Fragen zu stellen und sich untereinander zu vernetzen.

Agenda, Anmeldung und Ort jeweils hier:

25. April Leipzig

27. April München

11. Mai Berlin

16. Mai Stuttgart (leicht geänderte Agenda)

Delphi/Object Pascal at #9 in Tiobe March 2017 index - Swift enters top 10

$
0
0

The March 2017 Tiobe programming language index report is out. Delphi/Object is at number nine in the report. Swift enters the top ten for the first time.

From the Tiobe index post:

      "This month Swift enters the

TIOBE index

    top 10 for the first time. About 3 years ago Apple announced that it would replace its 'ancient' native mobile app development language Objective-C by its newborn language called Swift. The expectations were high right from the start, but adoption took off slowly. That is for good reasons by the way because the installed base of Objective-C code is quite large. New applications are written in Swift, whereas old apps that are written in Objective-C are not actively migrated to Swift. This is also what we observe at customer sites. Since Swift is mainly intended to write applications in Apple's ecosystem, it is expected that it won't rise much further."

Delphi moved from 11th to 9th. Swift moved from 14th to 10th. The March 2017 index's top five languages stayed the say from February 2017: 1) Java, 2) C, 3) C++, 4) C#, 5) Python.

 

 


InterBase 2017 als Dienst (Service) unter Linux (Ubuntu)

$
0
0

Nur ein kleiner Hinweis von meinem Delphi 10.2 Tokyo / InterBase 2017 Blogeintrag:

Um InterBase als Dienst (Hintergrunddienst / Service) zu starten, sagt die Dokumentation:

To run InterBase as a service:
  /usr/interbase/examples/ibservice.sh -s[tart] 
When you choose to run InterBase as a service, the InterBase server starts automatically whenever the machine is running in a multi-user mode.

Was nicht "ganz" korrekt ist.

Das Script "ibservice.sh" verlangt nämlich danach, daß der Dienstename, als Dateiscript zum Starten vorliegt. Der Standard-Dienstename (das Startscript für den Dienst) heisst "ibserverd" und liegt in /opt/interbase/examples/ibserverd. Dieses muss man zuerst in den gewünschten Namen kopieren

root@ubuntu:~# cd /opt/interbase/examples/
root@ubuntu:/opt/interbase/examples# cp ibserverd ibserverd_gds_db

Anschliessend kann man das Installationsscript aufrufen:

root@ubuntu:/opt/interbase/examples# ./ibservice.sh -s /opt/interbase gds_db

-s. :  Start/Installation des Hintergrunddienstes (Deinstallation mittels -r (Remove)
/opt/interbase. :  Installationsverzeichnis (wahlweise /usr/interbase)
gds_db. :  Dienstename (wie schon weiter oben, als Dienstescript kopiert)

Danach startet InterBase auch als Dienst beim Start des Rechners automatisch (aus dem Kernel Log):

Mar 22 13:43:08 ubuntu ibserverd_gds_db[1469]: InterBase Server starting...

Auch überprüfbar mittels netstat -a:

root@ubuntu:/opt/interbase/examples# netstat -a
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:gds_db                *:*                     LISTEN     
tcp        0      0 localhost:mysql         *:*                     LISTEN     
tcp        0      0 *:netbios-ssn           *:*                     LISTEN     
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 *:ms-sql-s              *:*                     LISTEN     

(Da läuft auch noch gleich ein MS SQL Server und ein MySQL Server....)

RAD Studio / Delphi / C++Builder 10.2 Tokyo ab sofort verfügbar!

$
0
0

Ab sofort ist Delphi, C++Builder und RAD Studio 10.2 Tokyo verfügbar. Inklusive der Trial/Testversionen und der (kostenfreien) Starter Editionen.

Einige Neuerungen:

  • LLVM Compiler für Linux
    • 64 Bit
    • Unterstützung für/mit Delphi
    • ARC fähig
    • 1-basierte Strings
    • Linux Unterstützung für
      • Ubuntu Server
      • RedHat Enterprise Linux (V7)
  • Neue RTL Funktionen
    • Zugriff auf das Linux Dateisystem
    • Threading / Parallel Programming Libraries für Linux
    • REST / HTTP Aufrufe unter Linux
  • FireDAC für Linux (bis auf Informix)
  • FireDAC Unterstützung für MariaDB (Windows, Linux, ....)
  • WebBroker, RAD Server und EMS, sowie DataSnap Unterstützung unter Linux
  • PAServer, DUnitX, Indy unter Linux
  • Verbesserungen für iOS (10.2.x Unterstützung, Systemstatuszeilenerweiterungen)
  • Verbesserungen für den C++Builder-Linker (bis zu 4 GiB Speicher!!)
  • Verbesserungen in der IDE (Neues "Ansicht"-Menü, High-DPI Unterstützung weiter ausgebaut, parallele Downloads für GetIt)

 

Testversion:
https://www.embarcadero.com/de/products/delphi/start-for-free

Starter Edition (kostenfrei)
https://www.embarcadero.com/de/products/delphi/starter/promotional-download

 

Debian und Delphi/Linux

$
0
0

Sehr häufig kommt die Frage, welche Linux Distributionen wir unterstützen. Namentlich sind das zwei wesentliche:

  • Ubuntu 160.04 LTS
  • RedHat Linux Enterprise Linux 7

Manchmal kommt die Frage, ob auch Debian funktioniert..... das habe ich mal getestet (ohne Garantie auf offizielle Funktionalität).

In einem Satz: Es funktioniert!

Ein einfaches Hello-World:

Auch ein Zugriff über FireDAC funktioniert:

Sieht gut aus :-)

 

Bash on Ubuntu on Windows 1703 "Creators Update" und Delphi

$
0
0

Da ja seit gestern das sogenannte "Creators Update" von Windows erschienen ist (zumindest bei TechNet, MSDN) und das "Windows-Subsystem für Linux (Beta)" in Zuge dessen auch aktualisiert wurde (Ubuntu 16.04.01), hat mich interessiert, ob das Ganze dann auch mit Delphi funktioniert.

Kurze Antwort: Jain :-) Programme laufen, PAServer (noch) nicht.....

Doch zuerst die Bash :

Innerhalb von Windows 1703 muss man zuerst zwei Dinge erledigen:

  • Zuerst muss man über "Programme und Features" (was sich im 1703, Creators Update, etwas versteckt hat), das "Windows-Subsystem für Linux (Beta)" installieren. Dazu müssen der Entwicklermodus für Windows aktiviert werden(!):
  • Anschliessend muss man über "bash" dieses Subsystem konfigurieren (Benutzername, Kennwort, ...). Optional kann man mit einem beherztem apt-get update && apt-get upgrade das Subsystem auf Ubuntu 16.04.02 bringen.

Jetzt zum PAServer.... um es kurz zu machen: Der läuft noch nicht :-(

Aber zur Entwicklung und der Ausführung von Programmen: Die laufen!

program Project1;
{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils,
  Unit1 in 'Unit1.pas' {DataModule1: TDataModule};

var
  dm: TDataModule1;
  i, j: integer;

begin
  try
    { TODO -oUser -cConsole Main : Code hier einfügen }
    writeLn;
    writeLn('InterBase auf ' + TOSVersion.ToString);
    writeLn('------------------------------------------------------------');
    dm := TDataModule1.Create(nil);
    dm.FDTable1.First;
    for i := 1 to 10 do
    begin
      for j := 0 to 3 do
      Begin
         Write(dm.FDTable1.Fields[j].AsString+#9)
      End;
      WriteLn;
      dm.FDTable1.Next;
    end;
    ReadLn;
  except
    on E: Exception do
      writeLn(E.ClassName, ': ', E.Message);
  end;
end.

In dem Datenmodul sind eine FDConnection und eine FDTable auf einen InterBase Server 2017 auf einem (anderen) Ubuntu vorhanden....

Das Programm läuft erwartungsgemäß unter Windows:

Und nachdem ich die passende InterBase .so-Datei auch mitgegeben habe auch im Ubuntu-Subsystem:

:-)

【告知】Delphi / C++ Builder 業務アプリケーション 刷新実践法(4月14日)

$
0
0

4月14日(金)に、「Delphi / C++Builder で作成した以前のプロジェクトを最新環境へと移行させる」ためのセミナーを実施します!

Windows 10は、過去のWindows OSと何が異なるのか、また「最後のWindows」と言われるWindows 10のアップデートサイクルについて説明するとともに、最適なプロジェクト移行スケジュールの立て方などについて知っていただけます。

また、BDE(Borland Database Engine)を使用してデータベース接続をしているようなプロジェクトをお持ちの方に、最新のFireDAC データベース接続フレームワークを使用して最新データベース接続へと移行する手法をご紹介します。

そして、C++Builder プロジェクトや、文字コード周り、COMコンポーネントを使ったハードウエア周りの移行についてご紹介します。

以前のプロジェクト・システムを新しくしないと…と考えている方々、参加は無料です。是非セミナーにご参加いただき、移行のヒントをつかんでいただければと思います。

以下、実施概要です。


 「旧バージョンのDelphi / C++Builderで開発された膨大なアプリケーション資産を、効率よく最新バージョンに対応させる変換ツールはありませんか?」こうした質問をよく耳にします。

BDEを使ってOracleなどのRDBMSに接続するアプリケーションのコードは、一定の規則に基づいて、ある程度最新のFireDACに変換することが可能。そのための変換ツールも用意されています。 今回、こうしたツールも活用しながら、旧バージョンのDelphi / CBuilderによって開発された業務アプリケーションを、最新バージョンに対応させていくための手法を解説するセミナーを開催します。Webセミナーでは紹介できなかった、より詳しい移行ノウハウを、ビジネスアプリケーションを対象に解説します。 Delphi / C++Builderで開発された既存のC/Sシステム、FAシステムなどの改修を検討している方に最適なセミナーです。

セミナーへの参加は無料です。 下記の申し込みページからご登録ください

登録ページ:http://forms.embarcadero.com/rad-biz-app-migration-seminar

開催概要

セミナー「Delphi / C++ Builder 業務アプリケーション 刷新実践法」

  • 主催: エンバカデロ・テクノロジーズ
  • 日程: 2017年4月14日(水)14:00~17:00 (13:45 受付開始)
  • 会場: エンバカデロ飯田橋オフィス セミナールーム(東京・飯田橋)
  • 参加費: 無料(事前登録制。下記のページよりお申し込みください)
  • セミナーホームページ: http://forms.embarcadero.com/rad-biz-app-migration-seminar
プログラム

セミナーでは、以下のテーマごとに移行の実践手法をご紹介いたします。

  • 業務システムのWindows10対応の進め方
    Windows10では「Windows as a Service」という新しい概念が導入され、OSのサポート方針や新機能の追加タイミングが変わりました。これにより業務システムでのWindows10対応では今までと異なる進め方が求められます。またタブレット向けの対応が進み、UIについても様々な改良が行われました。このような状況の元、業務システムのWindows10対応の進め方や対応時期についてご案内いたします。

  • BDEを使った業務アプリを移行ツールで最新化
    BDEでOracleや MS SQL等のRDBMSと接続する比較的大きなC/Sシステム・アプリケーションを移行するのは大変な作業に思えます。しかし、そのまま使い続けるにはセキュリティリスクが発生すると共に、より発展的な開発の足かせとなります。BDEから最新のFireDACへ対応させる変換ツール使って、より効率よく最新環境へ移行する手法をお伝えします。またデータベースを活用するにはモデリングも欠かせません。モデリングツールと移行ツールで古いプロジェクトをリフレッシュして新資産として生かしましょう。

  • FireDACやCOMポートを使ったUnicode移行ポイント
    古いプロジェクトファイル 拡張子.bpr .cproj から10.1Berlinへの簡単な移行と、古いマニフェストファイルから新しいマニフェストファイルへの移行方法を解説します。またFireDACを使用したデータベースアクセスでUnicodeを使い、中国/韓国/アラビア語などを表示・書込みさせる方法をご紹介。 ファクトリーオートメーションにおいてRS232Cポートをサードパーティ製COMコンポーネントを使ってByteデータ送信した場合のUnicode/ANSI 内容の違いなどをご説明いたします。

Viewing all 182 articles
Browse latest View live




Latest Images