![]() |
Neuer Blog über FireMonkey Entwicklung eröffnet
Hoffe hier ist die richtige Stelle, um die Nachricht los zu werden, dass ich nun auch einen Blog zur FireMonkey Entwicklung (Vorranging Cross-Plattform Entwicklung) auf meiner devpage eröffnet habe. Wer Lust hat, ist herzlichst eingeladen, hier einmal vorbei zu schauen:
![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Ich habe dieses Thema wieder hervorgeholt, da ich deutschsprachige Ressourcen zu Delphi und FireMonkey absolut begrüße. Neben seinem Blog hat Harry ein derzeit 180 Seiten umfassendes Buch geschrieben, welches das FireMonkey-Framework intensiv behandelt und auch Einsteigern gerecht werden sollte.
Das Blog selbst erlaubt zwar keine Kommentare von Außenstehenden, aber eine konstruktive Diskussion lässt sich ggf. auch hier oder an anderen Stellen führen. //Anmerkung: Das Thema wurde ursprünglich als "Werbung" klassifiziert und entfernt, was grundsätzlich korrekt ist. Aus nahe liegenden Gründen bestehe ich auf eine kurze Rücksprache, die mittlerweile erfolgt ist. :-) |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Danke für den Hinweis.
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Hallo Harry,
trotz Namensgleichheit bewerte ich FMX leider (noch?) etwas anders. Den Grundsatz der Windowsunabhängigkeit (sowohl von den Controls als auch den Nachrichten) und die Skalierbarkeit finde ich super. Leider funktionieren viele Dinge nicht richtig wenn man mehr tun will als einige Controls in ein Formular zu setzen. Es werden in nicht nachvollziehbarer Form einfach Änderungen von Controls nicht richtig auf dem Formular dargestellt (der Canvas nicht sichtbar aktualisiert) oder Styles plötzlich nicht verwendet. In der Beziehung besteht noch viel Nachbesserungsbedarf, auf dessen Realisierung ich aber noch hoffe. Die LiveBindings (eigentlich unter FMX ja unverzichtbar - sofern man keine Alternative nutzen kann) kann man im Grunde komplett vergessen. So steht man letztlich praktisch im nativen FMX ohne datengebundene Controls da. Die Styles finde ich inzwischen im Ansatz auch nicht sinnvoll. Styles wären m.E. sinnvoll um der GUI ein einheitliches Aussehen zu verleihen (im Sinne eines Skinnings: Rahmen und Flächen sollten eben einheitlich dargestellt werden). Auf die Funktionalität eines Controls sollte ein Style aber keinen Einfluß haben. Ich verstehe die Sinnhaftigkeit des Konzeptes nicht. Ändert man einen Style hat eine Komponente plötzlich andere Bestandteile? Zu einer übersichtlichen und effektiven Arbeitsweise trägt das nicht bei. Mein Wunsch: Konzept der Styles überarbeiten (und auf ein Skinning beschränken), Fehler bei der Darstellung im Formular bereinigen, Komponentenpalette ergänzen/optimieren ... dann könnte der Affe richtig brennen. Die angesprochenen Punkte (insbesondere das Style-Konzept) würde ich auch gern ausführlicher diskutieren. Ich vermute aber leider nicht, dass Emba sich da aktiv einbringen würde (wäre cool, wenn es einen deutschen FMX-Ansprechpartner gäbe, so dass angesprochene Punkte nicht in der QC versickern). (An einer Alternative zu den Livebindings versuche ich mich ja schon selbst.) |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Hallo Stahli,
ich stimme Dir zu, dass in der Tat noch einiges an Nachbesserungsbedarf an dem ganzen FireMonkey-Framework besteht. Was mich aber daran fasziniert ist die Tatsache, dass man damit schon jetzt relativ leicht Programme für den MAC schreiben kann. Die Aussicht, es bald auch für IOS-Geräte (wieder mit MobileStudio) und dann hoffentlich bald auch für Android machen zu können, finde ich vielversprechend. Und die Marktmacht dieser Stores finde ich schon sehr attraktiv, vor allem wenn man Einzelentwickler ist oder KMU. Und Apple und die ganze Entwicklung zu OS X hin sollte man nicht unterschätzen. Als das wertvollste Unternehmen der Welt (bzw. gerade im Wechsel mit Exxon) werden die noch einiges tun, um die MAC Basis zu erweitern. Auch geht viel Nutzung vom PC weg hin zur Tablet-Nutzung. Da ist es dann nicht verkehrt, Angebote für die Anwender zu haben. Livebindings finde ich in einigen Fällen ganz praktisch, z.B. um in einem ImageViewer und mit einer Trackbar in das Bild rein- und rauszoomen zu können, oder ähnlich einfache Konstruktionen. Man braucht da keine einzige Zeile Code zu schreiben. Wenn es um umfangreiche Datenbankanbindungen geht, kann ich dazu leider nicht viel sagen, weil ich in dieser Hinsicht Delphi vielleicht eher ein wenig atypisch nutze (also ohne die ganzen Datenbankfunktionen; nichts desto trotz habe ich aber ein netzwerkfähiges, sogar über das Internet nutzbares Datenbank-Programm in meinem Portfolio, so wie ich das derzeit sehe, werde ich das auch für den MAC umsetzen können). Die IDE zur Bearbeitung der Styles finde ich auch noch verbesserungswürdig und auch an der Funktionalität kann man noch was schrauben. Es wird auch wohl so sein, dass man derzeit nicht alles, was unter Windows machbar ist, auch unter FM machen kann. Ich denke aber, das wird nach und nach möglich sein. Ich verfolge hier z.B. derzeit auch die Strategie, zunächst einfachere Programme (wie z.B. wie jetzt mit Copy Backup mit 50.000 Programmzeilen geschehen) auf FM umzusetzen und dann die komplexeren Programme folgen zu lassen. Mein Ziel ist ja auch, mit dem eBook Lösungen zu bieten, um mit der jeweils aktuellen Delphi-Version bestmöglich Cross-Platform Programme schreiben zu können. Man muss halt auch schon mal mit Workarounds leben oder die Funktionalität schrittweise erweitern. Ich lerne da momentan selber noch dazu. Was noch ein wenig Arbeit in der Entwicklung machen wird, ist (nicht für alle, aber für viele Programme) die Apple Sandbox-Funktion für den App-Store. Das wird auch mein nächstes Blog-Thema sein. Harry Stahl |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Und jetzt nur kurz die Info, dass der angekündigte Blogbeitrag zum Sandboxing mit Delphi nun online ist (
![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
FireMonkey Blog, Teil 3 ist nun online: Delphi mit MAC API's (POSIX, CORE F. und COCOA) verwenden
Hier also kurz die Info, dass ich gerade den 3. Teil gepostet habe. Im Blogbeitrag wird beschrieben, wofür die einzelnen API-Layer stehen und wie sie sich generell unterscheiden. Auch wird für jeden API-Bereich an Hand eines Beispiels gezeigt, wie man entsprechende API-Funktionen in Delphi einbindet. Viel Spaß beim Lesen Harry Stahl ![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Danke für die Info.
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
So langsam wird das eBook interessant, ich favorisiere jedoch PDF. Hast Du es nur im Kindle Shop oder auch als PDF?
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Ganz am Ende der Info-Seite zum E-Book auf der Devpage Seite ist auch eine alternative Möglichkeit, das Buch als PDF-Datei zu erwerben (
![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Gerade habe ich einen neuen Blogbeitrag zur Grafikbearbeitung mit FireMonkey (für MAC OS X) hochgeladen (
![]() Mit dem Erscheinen von Delphi XE4 ist das eBook-Projekt zu Delphi XE3 nun auch abgeschlossen, d.h. die heutige Aktualisierung stellt nun das letzte Update des Buches dar. Soweit ich das im Moment überblicken kann, haben die Ausführungen zu Delphi XE3 aber weiterhin Gültigkeit auch für Delphi XE4. Derzeit ist noch unklar, ob ich ein neues Buch für Delphi XE4 schreiben werde. Falls ja, werde ich dies in diesem Forum bekannt geben. Den Blog werde ich aber auf jeden Fall weiterführen. Viel Erfolg mit FireMonkey und Delphi! |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Schnell noch bestellt, habe völlig übersehen dass ich Kindl ja mit der Amazon-App auf dem Galaxy Tab lesen kann.
Würde mich freuen wenn es mit XE4 weitergeht, gerade in Sachen Mobile könnte das sehr interessant werden. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Wollte hier mal wieder den Hinweis los werden, dass ich - nach längerer Pause - gerade einen neuen Blog-Beitrag zu Delphi-XE5 und FireMonkey (weiterhin in Bezug auf Crossplatform Windows / MAC OS X) veröffentlich habe.
Da finden sich auch erste Hinweise und Workarounds für die Übernahme von älteren MAC OS X FireMonkey-XE3-Projekten nach XE5 und eine Möglichkeit, wie man ein eigenes Menü mit eigenen Einträgen als MAC OS-System-Menü verwenden kann. Link steht unten. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Und wieder der Hinweis, dass es in meinem Blog einen neuen Beitrag zu FireMonkey gibt.
Diesmal geht es um die FireMonkey-Styles. Anhand des Buttonstyle wird einmal erklärt, wie auf unterschiedlichen Wegen ein Button gezeichnet werden kann und welche Unterschiede dabei zwischen Delphi XE3/XE4 und XE5 bestehen. Ferner auch ein Tipp, wie man das Standard-Styles Bitmap (Windows 7style.png) ändert, um so einen eigenen Farbstil zu erzeugen. Hier geht's zum Beitrag: ![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Hi Harry,
mich überzeugt das Konzept der Styles nicht wirklich. Wenn man sich eine Komponente (MyComponent) + "Styleanweisungen" (mycomponentsyle) unter irgendeinem Style bastelt und später einen anderen Style lädt, dann wird die Komponente nicht gezeichnet da in dem neuen Style keine "Styleanweisungen" für diese Komponente gefunden werden. Ich muss also für mein Projekt alle Styles anpassen, die ich bereitstellen will, nur weil ich eine eigene Komponente einsetze. Wäre es nicht besser, allgemeinere Bausteine zu definieren (Rahmen_links_erhöht, Rahmen_links_flach, Rahmen_links_vertieft, Hintergrund, Ecke_Links_unten_rund_erhöht...), aus denen dann zu Projektstart die Abbilder erzeugt werden? Ich hätte jedenfalls gedacht, dass man Styles am besten so aufbaut. Vielleicht ist mein beschriebenes Problem ja aber (inzwischen?) auch gar nicht (mehr?) vorhanden. Das würde mich freuen. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Bin leider kein Fachmann für Komponentenentwicklung. Muss gestehen, dass ich eine Vorliebe für Programmentwicklung habe.
Aber vielleicht findest Du hier mehr Infos: ![]() Zitat:
Aber wie wäre es mit einer Alternative, zur einzelnen Anpassung der Style-Dateien? Z.B. könntest Du andere Style-Dateien, bevor Du sie vollständig lädst, um diesen Style zuzuweisen, on the fly mit Deinen Style-Informationen für Deine Komponente ergänzen? Also z.B. so: Schritt1: Style-Datei z.B. in eine TStringlist laden. Schritt2: Diese StringList mit Style-Informationen für Deine Komponente ergänzen. Schritt3: Diese StringList in einen Stream schreiben. Schritt4: Nun den Stream in ein Stylebook laden. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Bei einem kurzen schnellen Blick auf die Hilfe fühle ich mich bestätigt (siehe vor allem letzter Absatz):
Zitat:
Wenn ich also einen Style "MyComponentstyle" für "TMyComponent" deklariere und der Anwender einen anderen Style in die Anwendung lädt (das kann man ja so vorsehen) ist MyComponent nicht mehr sichtbar. Ähnlich läuft es wenn man von TEdit mal TBasedEdit und davon wieder TMyEdit ableitet und dieses benutzt. Man mag für das eine oder andere Problem Notlösungen finden, aber das Konzept würde ich aus meinem derzeitigen Blickwinkel als halbgar bezeichnen. Lieber würde ich hinterlegen, wie die Hintergründe der Controls gefüllt werden sollen (Holzmuster, Aluminium, Farbverlauf, grau, halbtransparent usw) wie die Rahmen aussehen sollen (jeweils für erhöht, flach und vertieft), welche Textfarbe und Textart genutzt werden soll usw. Dann könnte ich meiner TMyPanel einfach sagen dass sie einen abgerundeten Rahmen haben soll, dass sie erhaben, flach oder eingedrückt sein soll und das tatsächliche Abbild wird dann zum Programmstart oder bei Größenänderungen (nicht bei Verschiebungen von Komponenten) neu zusammengestellt. Dann müssten die Styles nur alle Bausteine (Schnippsel) enthalten, mit denen Komponenten zusammengebaut werden können und nicht mehr alle Komponentenabbilder selbst. Die Zusammensetzung der Schnipsel könnte sozusagen im Create jeder Komponente erfolgen - also per Quelltext. Oder man könnte dies auch über einen grafischen Editor und eine Ressource lösen, die dann in die Komponente integriert wird. Die Style-Dateien würden dann nur noch allgemein gültige Bausteine (Schnippsel) enthalten, die beim Zeichnen der Komponenten genutzt werden können. Dann wären alle Stiele für alle Projekte verwendbar und man müsste nicht befürchten, dass bestimmte Komponenten nicht oder völlig falsch dargestellt werden. Mich nervt eben, dass ein völlig neues Framework auf den Markt geworfen wurde, das ein wirklich hohes Potential hat, das dieses aber leider in großen Teilen verschenkt. Ich würde mich gern eines besseren belehren lassen - bin ja selbst nur Quereinsteiger - aber ich denke, so falsch liege ich da leider nicht. Für kleine 08/15-Anwendungen oder kleine Apps mag FMX ja funktionieren, aber für größere Projekte sehe ich schwarz. Jedenfalls kann man dann nur die Basics verwenden damit alles stabil läuft und muss sich in den eigenen Möglichkeiten selbst beschneiden. Das war sicherlich mal anders angedacht - jedenfalls haben das die Werbevideos von Emba suggeriert. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Hallo Harry,
wie immer vielen Dank für Deinen Eintrag, Dein Blog hilft, zumindest ein wenig Licht in's Dunkel zu bringen. Leider sind die Styles für mich uninteressant, da ich mich nach XE2/XE3/XE4 gegen einen Großteil der Firemonkey Controls und damit gegen Styles entschieden habe. Leider hat man mit jeder neuen XE-Version das Gefühl, dass ein neuer Entwickler eingestellt wurde, der dann umgehend wieder alles ändern muss (Profilierungsbedarf?). Daher muss ich das nehmen, was fast immer gleich ist: Die Grundform. Ansonsten nehme ich mittlerweile, wo immer es geht, TMS. Die sehen native aus, verhalten sich native und ich bekomme Controls, die das können was ich benötige. Da das, wenn ich es recht beobachte, viele betrifft, würde ich mich über Einträge bzgl. Plattform-Unabhängigkeit freuen. Was muss ich wie tun, ob meine App in den Store zu bekommen? Zertifikat beantragen, Codesign usw. Wie teste ich es effektiv? Mac, Android etc.? Ich denke, hier sind noch viele Fragen offen. Mittlerweile habe ich mein Projekt für den Mac signiert, aber bitte frag mich nicht, wie ich das gemacht habe, war ein Try-and-Error. Allerdings lehnt der AppStore es jedesmal ab, zumindest der Uploader. Wieso weiß ich nicht. Der Spaß wird mit Windows RT weitergehen und Android habe ich noch nicht angefangen. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Zitat:
![]() So wie ich es verstehe, basiert auch bei der Komponentenentwicklung die Zeichnung der Komponenten auf Stilvereinbarungen. Deswegen könnte ich mir vorstellen, dass man eine neue Komponente auf der Basis von bestehenden Standard-Komponenten / Standard-Stilvereinbarungen entwickelt, dann müsste die Komponente auch gezeichnet werden, wenn ein anderer Stil geladen wird. Wenn Du Dir z.B. einmal von TMS die TMSFMXGrid Komponente ansiehst. Da kann man auch einen anderen Stil für die Form laden, trotzdem wird das Grid weiterhin angezeigt. Es sollte also ein Weg existieren. Vielleicht hat ja auch noch jemand aus diesem Forum einen Tipp für Dich, der selber schon mal eine Komponente entwickelt hat. Zitat:
![]() Die anderen bislang von mir entwickelten FireMonkey-Anwendungen fallen eher in die 08/15 Kategorie, aber auch damit lässt sich Geld verdienen (neuestes, gerade in den App-Store aufgenommenes Produkt ist das MultiScreenShot-Programm, siehe hier: ![]() Ich habe gerade begonnen, mein kommerziell bislang erfolgreichstes Produkt (PC-Adreßzz!) auf FireMonkey umzustellen, denn nur so werde ich der immer stärker werdenden Nachfrage nach IOS- und Android-Apps gerecht werden können. Hier werde ich aber erst in einigen Monaten mehr zu sagen können... |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Zitat:
Zitat:
Mit XE4 wurde dann auch IOS wieder auf der neuen Basis unterstützt und dann mit XE5 auch Android. Man muss sich doch nur mal vorstellen, welche wahnsinnige Arbeit es sein muss, für diese 4 Megaplattformen (Windows / MAC / IOS / Android) Schnittstellen zu generieren, so dass eine Komponente auf allen Plattformen funktioniert. Und diese Plattformen selber haben ja auch wieder eine irre Dynamik und die nehmen auch nicht unbedingt Rücksicht auf Compiler-Hersteller. Zitat:
Zitat:
Zitat:
Aber die Anregung, noch ein wenig mehr das Thema "Plattform-Unabhängigkeit" zu fokussieren, nehme ich gerne auf. Zitat:
Wichtig ist auch, dass Du den aktuellsten Uploader benutzt. Wenn Du hier die Fehlermeldung preis gibst, kann ich evtl. mehr dazu sagen. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Gerade habe ich einen neuen Blogbeitrag hochgeladen, der beschreibt, wie man FireMonkey–Funktionen von einer VCL-Anwendung aus per FMX-DLL nutzen kann.
Es wird gezeigt, wie man z.B. ein Bitmap aus seiner VCL-Anwendung an den FireMonkey-DLL Dialog übergibt und mit Hilfe des PaperSketch-Effekts verändert und dann wieder an die VCL-Anwendung zurück gibt: ![]() Im Blogbeitrag ist auch ein Link auf mein YouTube-PixPower-Kanal, wo man sich die Funktion direkt in Aktion ansehen kann. Viel Spaß damit. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
etwas OT...
Das Pix-Power ist ja (dem ersten Eindruck nach) der Hammer. :thumb: Das werde ich mir mal die nächsten Tage näher ansehen. Nutzt Du da DirectX, OpenGL oder o.ä. und lässt jetzt FMX extern Effekte berechnen? |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Es werden wohl die Filtereffekte von FMX verwendet ( Dll verwendet FMX und gibt die Bilder über Memorystream an VCL Anwendung), wie er vorgeht beschreibt er in dem genannten Blogeintrag.
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Ok, habe Mittag mal schnell drüber gelesen. Ich dachte nur nicht, dass das bisher reine VCL war. Ich bin jedenfalls beeindruckt. :)
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Zitat:
Zitat:
An Drittkomponenten nutze ich nur ImageEn, um die Photoshop-Datei einzulesen und später wieder zu speichern, die ganze Ebenenverwaltung, Zeichnung, Auswahlen etc. mache ich selber. Aber ich plane noch eine Reihe von Dingen über die DLL-Lösung in das VCL-Programm zu integrieren, bevor ich eine reine FMX-Anwendung daraus mache. Einige Funktionen unter FMX sind besser und schneller, als unter (Standard-)Windows möglich. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Mal eine bescheidene Frage:
Hast du das wirklich so in einer realen Anwendung drin?
Delphi-Quellcode:
Da fallen mir so ein paar Dinge auf, die ich so nicht machen würde:
function ShowBitmapFromStream (ms: TMemoryStream; fn: shortString): ShortString;
var Filter: FMX.Filter.TFilter; begin Filter := TFilterManager.FilterByName('PaperSketch'); try F_Filters := TF_Filters.Create(Application); F_Filters.ImageViewer1.bitmap.LoadFromStream(ms); if F_Filters.ShowModal = mrOK then begin Filter.ValuesAsBitmap['Input'] := F_Filters.ImageViewer1.bitmap; Filter.ValuesAsFloat ['BrushSize'] := F_Filters.TrackBar1.Value; F_Filters.ImageViewer1.bitmap := TBitmap (Filter.ValuesAsBitmap['Output']); F_Filters.ImageViewer1.bitmap.SaveToFile (fn); Result := fn; end else begin Result := ''; end; finally F_Filters.Free; end; end;
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Also die tatsächliche Implementierung hat natürlich noch ein paar Sicherheitsprüfungen an verschiedenen Stellen dazu, die ich aber zur besseren Lesbarkeit des Source-Codes hier weggelassen habe.
Zu IStream kann ich nicht viel sagen, da ich bislang damit noch nichts zu tun hatte. Aber ich lerne gerne dazu. Warum würdest Du also IStream hier verwenden? Und gibt es das überhaupt für FireMonkey? Weshalb ich einen Shortstring verwende, habe ich ja im Blogbeitrag beschrieben. Warum würdest Du statt dessen lieber Widestring verwenden? Ich stimme Dir zu, die Rückgabe eines Bitmap-Streams wäre eleganter (und noch ein wenig performanter). Habe ich ja selber im Blogbeitrag beschrieben, dass ich es mir ein wenig bequem mache. Es war letztlich aber nicht nur Bequemlichkeit. Wenn ich einen FireMonkey-Bitmap-Memorystream (oder IStream?) wieder auf VCL-Seite annehmen würde, müsste ich dort wieder notgedrungen einige FMX-Units aufnehmen, um über eine Firemonkey-TBitmap eine Konvertierung in eine VCL-TBitmap vorzunehmen. Was grundsätzlich geht, aber es wären einfach eine Reihe zusätzlicher Randbedingungen in meinem Source-Code zu ändern gewesen, so dass ich eben die Lösung mit der temporären Datei gewählt habe. Und die Empfehlung von EMBA, VCL-Code und FMX-Code nicht zu mischen, macht für mich auch grundsätzlich Sinn. Jedenfalls funktioniert es in meiner Anwendung tadellos. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Die Funktionalität will ich deiner Umsetzung gar nicht absprechen, sie ist nur unschön.
Delphi-Quellcode:
so aus (die Rückgabe erfolgt im gleichen Stream ;)):
IStream
Delphi-Quellcode:
BTW:
function ProcessBitmap( ABitmap : TBitmap ):Boolean
var LStream : TStream; begin LStream := TMemoryStream.Create; try ABitmap.SaveToStream( LStream ); if ShowBitmapFromStream( TStreamAdapter.Create( LStream, soReference ) ) then begin LStream.Seek( 0, soFromBeginning ); ABitmap.LoadFromStream( LStream ); end; finally LStream.Free; end; end; Ich habe gerade die Vorlage für deinen Code entdeckt ![]() Nun ja, die Beispiele sind von denen halt auch nicht so der Brüller. Und den Grund für die Rückgabe als Datei habe ich auch entdeckt (ein echter Schenkelklopfer): ![]() ![]() ![]() Schaut man sich den Code von
Delphi-Quellcode:
an, dann sieht man aber auch sofort, wie man das abändern kann ;)
TBitmap.SaveToStream
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Vielen Dank für Deine Erläuterungen:
* Für Widestring müsste man wieder die ShareMem-Interface-Unit einbinden und zusätzlich die BORLNDMM.DLL weitergeben. Warum sollte ich das machen, wenn ich bei der gezeigten Implementation gar keine Unicodenamen brauche? Wenn ich es doch brauchen sollte, verwende ich PChar, so kann ich Unicode verwenden, brauche aber die erwähnte Unit und DLL nicht. * Ich hatte zuvor für mich schon einmal die Rückgabe mit dem TMemoryStream implementiert. Die Rückgabe funktionierte genau so, wie die hier von Dir vorgeschlagene Lösung mit dem IStream. Beides mal kommen für sich gesehen auch gültige Streams an. Das habe ich insofern getestet, als dass ich den Stream als Bitmap-Datei gespeichert habe und mit einer FireMonkey-Applikation konnte man diese Bitmap-Datei dann einlesen. Aber auch bei Deiner Lösung wird das einlesen des Streams in die VCL-Bitmap mit der Fehlermeldung quitiert, dass die Bitmap ungültig sei. Grund ist der, dass ja ein Stream für eine FireMonkey-Bitmap zurückgeliefert wird und den kann ich nun mal nicht in eine VCL-Bitmap einlesen, weil die eben nicht kompatibel sind. Insofern funktioniert der von Dir vorgeschlagene Weg mit dem IStream als "schönere" Lösung hier leider auch nicht. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Oh, da hat sich Deine ergänzende Antwort mit meiner überschnitten.
In
Delphi-Quellcode:
hatte ich natürlich auch schon reingesehen, aber jetzt durch Deinen Hinweis, dass man es "sofort sehen würde, was man abändern kann", habe ich nun auch gesehen, dass der Stream im PNG-Format gespeichert wird. OK. Das sollte man in der Tat ändern können, muss mal sehen, wie ich das am Besten mache. Dann sollte auch der Weg über einen Stream insgesamt gehen.
procedure TBitmap.SaveToStream(Stream: TStream);
var Surf: TBitmapSurface; begin Surf := TBitmapSurface.Create; try Surf.Assign(Self); TBitmapCodecManager.SaveToStream(Stream, Surf, '.png'); finally Surf.Free; end; end; Aber heute nicht mehr, morgen mach ich weiter... Jedenfalls Danke für Deine Hinweise, es freut mich immer wieder, wenn am Ende eine neue Erkenntnis steht. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Da ein
![]() Die Verwendung von
Delphi-Quellcode:
ermöglicht es zudem, diese DLL nicht nur von Delphi Anwendungen benutzen zu können.
IStream
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Zitat:
Wir sollten uns vielleicht öfter mal unterhalten... Zitat:
|
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
So, ich habe den Blogbeitrag nun aktualisiert, auch die Rückgabe des Bitmaps geht nun per Stream, eine temporäre Datei wird nicht mehr benötigt.
Ich habe am Ende des Blogbeitrags auch einen Download-Link des Demos hinzugefügt, so spart man sich das tippen (evt. mal F5 zur Browser-Aktualisierung drücken). Den Source-Code könnt Ihr natürlich frei verwenden. Vielen Dank noch mal an Sir Rufo, durch seine Hinweise konnte die Sache deutlich verbessert werden. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Ich habe den letzten Blogbeitrag noch um einen Link auf ein Youtube-Video ergänzt. Dort zeige ich, wie man die FMX-Form für die DLL, welche in der VCL-Anwendung genutzt wird, so modifiziert, so dass man sie auch direkt (also ohne DLL) in einer Firemonkey-Anwendung einbinden und verwenden kann.
![]() Ich werde in den nächsten Tagen noch weitere Videos produzieren und hochladen, wer da Interesse hat, kann meinen Kanal ja abonnieren, dann erhält er eine automatische Benachrichtigung, wenn es was neues gibt. Tipp zum Video: In voller Bildschirmauflösung und bei 720 DPI ansehen. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Heute mal kein schriftlicher Blogbeitrag, sondern ein kleines Video.
Video zeigt, wie man ganz schnell eine VCL-Form in eine FMX-Form umwandeln kann. HINWEIS: Mir ist bei der Demonstration leider ein kleiner Fehler unterlaufen, ich hätte vor der Hinzufügung des konvertierten Formulars zum FMX-Projekt noch den Suchpfad zum MIDA-Pack angeben müssten, daher funktionierte die Image-Konvertierung nicht. Also, in Wirklichkeit funktioniert es also noch etwas besser, als hier gezeigt;-)) ![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Noch ein kleiner Nachtrag:
Ich habe noch 2 ergänzende Videos hochgeladen, Teil 2 zeigt den Stand nach 5-6 Stunden Arbeit an dem zu konvertierenden Programm und Teil 3 gibt noch ein paar Tipps zum MIDA-Converter. Hier Teil 2: ![]() Hier Teil 3: ![]() Auch hier am besten in Vollauflösung und 720 DPI ansehen. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Erfreulicherweise hat das MIDA-Team meine Vorschläge zur Erweiterung des MIDA-Converters aufgenommen.
Es handelte sich dabei um die Option, nach der Umwandlung erst mal in den einzelnen Funktionen und Prozeduren den Source-Code auszukommentieren. Dadurch hat man erst mal eine funktionierende Form / Programm und kann dann einzelne Stellen schrittweise bearbeiten. Der zweite Vorschlag betraff die Option, bei TSpeedButton und TBittBtn die Images als Childcontrol in den Button zu übernehmen. Bislang gingen diese Grafiken einfach verloren (es sei denn, man ließ den TSpeedButton in einen TMIDAImageSpeedButton umwandeln, das hatte aber andere Nachteile). Insgesamt tolle Erweiterungen, die den Konvertierungsprozess noch einmal deutlich beschleunigen. Ich habe ein kleines Video hierzu in meinem FireMonkey-Video-Blog erstellt, dass Ihr Euch hier ansehen könnt: Hier Teil 4: ![]() |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Ich habe mal wieder einen neuen Beitrag in meinem FireMonkey-Blog veröffentlicht.
Diesmal geht es um das mixen von VCL und FMX-Komponenten in einer Form, konkret die Einbindung der VCL-PDF-Komponenten von Gnostice in eine Windows-FMX-Anwendung. Beschrieben wird die Lösung unter Verwendung der Hydra-Komponenten von Rem Objects. Hier geht es direkt zum Blogbeitrag: ![]() Hier zu einem Video, das ich dazu auf YouTube gepostet habe: ![]() Wer an dem Beitrag näher interessiert ist, sollte auch die ergänzenden Erläuterungen zum Video lesen. Der Beitrag könnte aber auch für reine VCL-Anwender von Interesse sein (ist er für mich auch sehr), da man mit Hydra z.B. seine Delphi 2007-Anwendung mit den Neuerungen der letzten Delphi-Versionen ergänzen kann und das alles innerhalb der bestehenden Anwendung. |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Ja, Hydra ist toll, aber... warum?
Man baut doch keine FMX Anwendung und zieht sich dann für $499 selbst die Crossplatform Beine weg, indem man ne VCL DLL rein läd. :shock: |
AW: Neuer Blog über FireMonkey Entwicklung eröffnet
Zitat:
FMX bedeutet ja nicht unbedingt Mobile. Er hat doch klar gesagt, daß er diese für eine Windows-Anwendung zeigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz