Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TBitmap und NonVcl (https://www.delphipraxis.net/190265-tbitmap-und-nonvcl.html)

EWeiss 19. Sep 2016 02:27


TBitmap und NonVcl
 
Nur mal Interesse halber.

In wie weit widerspricht sich das wenn man TBitmap anstelle von HBitmap verwendet? (also reines WinApi)
Sollte man konsequent darauf verzichten ? Und anstelle dessen nur Graphics verwenden.

Sollte sich das widersprechen muss ich wohl noch etwas an meiner ScrollBox basteln.
Die zwar intern kein TBitmap verwendet aber halt im Example selbst.

gruss

jaenicke 19. Sep 2016 05:46

AW: TBitmap und NonVcl
 
Wenn du die Anwendung mit NonVcl klein halten willst, kannst du TBitmap natürlich raus lassen um nicht die VCL, in dem Fall die Unit Vcl.Graphics, einbinden zu müssen.

Ansonsten erstelle ich um die API-Handles gerne mal ein TCanvas oder TBitmap um diese einfacher zu nutzen.

EWeiss 19. Sep 2016 06:02

AW: TBitmap und NonVcl
 
Zitat:

Zitat von jaenicke (Beitrag 1347971)
Wenn du die Anwendung mit NonVcl klein halten willst, kannst du TBitmap natürlich raus lassen um nicht die VCL, in dem Fall die Unit Vcl.Graphics, einbinden zu müssen.

Ansonsten erstelle ich um die API-Handles gerne mal ein TCanvas oder TBitmap um diese einfacher zu nutzen.

Ok..
Ich halte mich innerhalb meiner DLL an die Win32 API.
Ich denke mal in den Beispielen TBitmap zu verwenden dürfte nicht so ein Problem sein wenn man von der größe einer Datei mal absieht.

Ich habe die Frage mal so hingeworfen da man eigentlich VCL und WIN32 Api nicht mixen sollte.
Letztendlich tut aber die VCL auch nichts anderes.

Ohne die WIn32 API kommt die VCL auch nicht aus.

gruss

Zacherl 19. Sep 2016 06:12

AW: TBitmap und NonVcl
 
Zitat:

Zitat von EWeiss (Beitrag 1347972)
Ich habe die Frage mal so hingeworfen da man eigentlich VCL und WIN32 Api nicht mixen sollte.

Wer sagt das? Die VCL ist ja nichts anderes als ein Wrapper für die Win32 API. Meiner Meinung nach spricht nichts dagegen beides zu mischen (sofern man ausschließlich für Windows compiled). An manchen Stellen stößt die VCL halt an ihre Grenzen und man kommt ohne ein paar direkte Aufrufe der WinAPI nicht weiter. Grundsätzlich ist die Verwendung der VCL natürlich schöner, da man hier objektorientiert arbeitet.

EWeiss 19. Sep 2016 06:22

AW: TBitmap und NonVcl
 
Zitat:

Grundsätzlich ist die Verwendung der VCL natürlich schöner, da man hier objektorientiert arbeitet.
Das ist Geschmacksache und Aufwendungsbedingt.
Du sagst doch selbst das man mit der VCL an seine grenzen stößt. (Ohne teure Zusatz Komponente).

Nebenbei ich werde noch einen Designer entwerfen mit dem man meine Visuellen Komponente incl. Window
zusammen stellen kann ohne das man alles jedes Mal von Hand im Code machen muss.
Ist schwierig aber umsetzbar.

Im Moment bin ich mit einer ProgressBar dran.

Zitat:

Die VCL ist ja nichts anderes als ein Wrapper für die Win32 API.
Ich habe nichts anderes behauptet..

Zitat:

Wer sagt das?
Suche mal hier NonVcl und mischen ;)
Luckie ist einer der dieser Meinung ist/war.

gruss

jaenicke 19. Sep 2016 09:17

AW: TBitmap und NonVcl
 
Zitat:

Zitat von EWeiss (Beitrag 1347974)
Nebenbei ich werde noch einen Designer entwerfen mit dem man meine Visuellen Komponente incl. Window
zusammen stellen kann ohne das man alles jedes Mal von Hand im Code machen muss.
Ist schwierig aber umsetzbar.

Wir haben das auch bisher selber gemacht gehabt, aber für wenig Geld gibt es für die VCL visuelle Designer, in die man bei eigener Umsetzung ansonsten so viel Entwicklungszeit stecken müsste, dass es sich schlicht überhaupt nicht lohnen würde...
Ob man die für deine Zwecke umfunktionieren könnte, wäre die Frage.

Medium 19. Sep 2016 09:18

AW: TBitmap und NonVcl
 
Es kommt beim Mischen natürlich immer darauf an, dass man weiss was man tut ;) Sonst könnte es an manchen Stellen passieren, dass man mit direkten API Aufrufen zu via VCL erstellten Ressourcen Dinge verdreht, ohne dass das zugehörige VCL-Objekt davon etwas merkt, und sich fortan nicht mehr so nett verhält. Kommt aber immer sehr individuell auf die konkret eingesetzten Klassen und Operationen an. Rein technisch ist das kein Problem, man muss nur die Fallstricke sehr genau kennen. Und das tun die meisten (mir inklusive) nicht überall.

himitsu 19. Sep 2016 09:23

AW: TBitmap und NonVcl
 
TBitmap ist nicht VCL. (Visual Control Library)

TBitmap ist NonVCL bzw. RTL, da nicht visible. :stupid:


PS: Man kann auch mit der VCL eine TForm erstellen, bindet dann diese Ressource (DFM) in sein Programm ein und dann ist es nicht verboten diese DFM selber zu parsen und daraus zur Laufzeit eine NonVCL-Form zu generieren, oder vorher sich daraus einen Quellcode generieren zu lassen, der diese Form dann erstellt.
Delphi-Referenz durchsuchenTReader
Oder man baut sich NonVCL-Ersatzklassen (von TComponent abgeleitet) mit den selben Namen/Alias und gleichen Property (die, welche nötig sind) und kann sich dann vom DFM-Loader diese Komponenten aus der DFM-Erstellen lassen.

Neutral General 19. Sep 2016 09:24

AW: TBitmap und NonVcl
 
Zitat:

Zitat von himitsu (Beitrag 1347983)
TImage ist nicht VCL. (Visual Control Library)

TImage ist NonVCL bzw. RTL, da nicht visible. :stupid:

To be or not to be :mrgreen:

Ich schätze das 2. sollte TBitmap heißen ;)

EWeiss 19. Sep 2016 09:26

AW: TBitmap und NonVcl
 
Zitat:

Ob man die für deine Zwecke umfunktionieren könnte, wäre die Frage.
Ist gut gemeint aber auf der Basis von Fremden Code etwas aufbauen zu wollen halte ich für nicht angemessen.
Denke auch nicht das Wenn ich eine Komponente Kaufe es gern gesehen würde wenn ich deren Skins, Code was auch immer für eigene Zwecke missbrauche.
Auf meine weise trete ich niemanden auf den Schlips.

Wo bleibt dann der Spaß? ;)
Ich denke zwar nicht das die Leute hier mit meinen Projekten allzu viel anfangen können.
Aber zumindest haben doch einige von meinen Beiträgen bzg. NonVcl sich etwas abschauen können.


Zitat:

TImage ist NonVCL bzw. RTL
Du meinst TBitmap ist NonVcl ?
Dann dürfte es kein Problem sein :)


gruss

himitsu 19. Sep 2016 09:40

AW: TBitmap und NonVcl
 
Also TBitmap ist zumindestens kein VCL.

Aber es kommt darauf an, was man als NonVCL ansieht und wie weit man das treibt.
* nur ohne VCL die Forms selber gemacht
* oder auch ohne viele andere "große" Funktionen/Klassen

Man kann auch auf Indy, die Exceptionbehandlung (SysUtils), TStringList, Generics und Vieles mehr verzichten und alles selber machen.


Zitat:

Zitat von Neutral General (Beitrag 1347984)
Ich schätze das 2. sollte TBitmap heißen ;)

Upss :oops:

TImage wäre ja VCL :stupid:

EWeiss 19. Sep 2016 10:06

AW: TBitmap und NonVcl
 
Zitat:

nur ohne VCL die Forms selber gemacht
Jup um die visuellen Komponenten. ;)

gruss

Luckie 19. Sep 2016 10:57

AW: TBitmap und NonVcl
 
Die VCL verbirgt viel vor dem Programmierer. Man weiß aber nicht genau was, ohne die Sourcen genau zu studieren. wenn man das jetzt mit NonVCL mischt, könnte sich das irgendwo beißen oder zu Nebeneffekten führen und man weiß nicht warum. Beispielsweise fehlt dann irgendwo das TApplication Objekt oder was auch immer. Idee der NonVCL Programmierung ist es ja, die Exe-Dateien möglichst klein zu halten. (Ob sinnvoll oder nicht und aus welchen Gründen man das macht, sei mal dahingestellt.) Wenn ich jetzt die VCL einbinde, habe ich gegebenenfalls wieder die ganzen Units drin, die die Exe-Datei so aufblähen.

Zacherl 19. Sep 2016 13:16

AW: TBitmap und NonVcl
 
Zitat:

Zitat von EWeiss (Beitrag 1347974)
Das ist Geschmacksache und Aufwendungsbedingt.

Im Grunde hast du recht, aber Delphi ist nunmal eine objektorientierte Sprache und die Win32 API aus Gründen der Kompatibilität prozedural. Bei uns kann man API Aufrufe auch mal schnell ohne Kapselung in eine Klasse reinmischen - keine Frage, aber bei C++ führt das beispielsweise schon oft zu ziemlichen Wurschtelcode, da try..finally hier unbekannt ist und das an Klassen gekoppelte RAII Prinzip benötigt wird, um Resourcen sicher zu finalisieren.

Zitat:

Zitat von EWeiss (Beitrag 1347974)
Nebenbei ich werde noch einen Designer entwerfen mit dem man meine Visuellen Komponente incl. Window
zusammen stellen kann ohne das man alles jedes Mal von Hand im Code machen muss.
Ist schwierig aber umsetzbar.

:thumb: Sowas hatte ich mir für mein DirectX GUI Framework auch gebastelt. Habe damals den RTTI-Inspector aus den JEDIs genommen, um den Objektinspektor von Delphi zu imitieren. Das hat mir einige Arbeit erspart.

Zitat:

Zitat von Luckie (Beitrag 1348019)
Wenn ich jetzt die VCL einbinde, habe ich gegebenenfalls wieder die ganzen Units drin, die die Exe-Datei so aufblähen.

Genau. Unter diesem Kriterium habe ich in meinen "nonVCL" Programmen auch immer auf TBitmap und den Rest der RTL verzichtet. An die Größe einer Anwendung mit Formularen und visuellen Controls kommt man damit zwar nicht ran, aber die Dateigröße wird trotzdem um einen enormen Grad größer.

EWeiss 19. Sep 2016 14:00

AW: TBitmap und NonVcl
 
Zitat:

Genau. Unter diesem Kriterium habe ich in meinen "nonVCL" Programmen auch immer auf TBitmap und den Rest der RTL verzichtet
Mache ich ja auch in meiner DLL..
Nur halt nicht bei meinem Testprojekt. ;)

Wenn ich noch keine Progressbar habe dann muss ich wohl oder über auf die VCL zugreifen.
Aber ich bin dabei.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz