AW: Träume, Wünsche und Wahnvorstellungen...
Hm, ich muss zugeben, ich weis jetzt nicht ob es das schon gibt, zumindest bei nicht D2009. Und bei XE2 glaube ich auch nicht. Folgendes :
- #define "Codeabkürzungen". Wie es in C++ gibt. Beispiel wie sowas aussehen würde.
Delphi-Quellcode:
- "Schlauer-Compiler" : Wenn man eine Unit einbindet, und verwendet von ihr nur eine Klasse oder Prozedur erkennt das der Compiler und "packt" nur diese Prozedur in die Exe. Und nicht alle Funktionen, Klassen etc. die man sowieso nicht verwendet. Da würde das Kompilieren länger dauern aber man hätte ne kleinere Exe. Besonders bei VCL wäre das hilfreich. Dan wären VCL-Anwendungen nicht so groß :-D
#define Dll_inport = {stdcall external "mydll.dll";}
procedure SendHalloText; DllImport; // "DllImport;" wird durch " stdcall external "mydll.dll"; " ersetzt. Dan würde der Code auch manchmal besser ausehen. Aufruf könnte man ja ändern war nur ein Bespiel. :-D - Umschalten von Unicode/Ansi, sodass man auch für Win98 noch schreiben kann und sich general den Mist mit Unicode/Ansi sparen kann (Natürlich nur bei 32bit :-D. Obwohl es denk ich kaum jemand noch gibt, der Win98 auf einen "physischen" Rechner hat. Gru0 NickelM |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
Und zumindest mir ist genau das sehr wichtig. |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
Teste es selbst: Schreib dir eine Funktion oder eine Klasse und benutze sie nicht in deinem Programm. Kompiliere das Programm (mit Debug Config). Schaue auf die blauen Pünktchen am linken Rand. Keine Pünktchen in den unbenutzten Teilen, weil der Linker das nicht reingepackt hat. Natürlich kann der nur rauswerfen, was wirklich nie benutzt wird, bzw was er feststellen kann. Daher werden z.B. keine öffentlichen Methoden rausgeworfen, weil die über RTTI angesprochen werden können. |
AW: Träume, Wünsche und Wahnvorstellungen...
Das Problem ist/war, wenn man diese Klasse über den Initialization-Abschnitt initialisiert, dann wird sie immer "verwendet" (in Initialization), selbst wenn sie sonst nirgendwo verwendet wird.
Darum ist die VCL auch so groß, bzw. einige gehn auf NonVCL und verwenden bestimmte Units garnicht, damit die EXE klein wird. Aber: Es gibt seit einer Weile den
Delphi-Quellcode:
, bzw.
class constructor
Delphi-Quellcode:
... wenn alle dort das machen würde, was sie sonst in "Initialization" machen würden, dann würde vieles wirklich nicht mehr eingebunden, wenn es nicht gebraucht wird.
class destructor
Was da leider noch fehlt, ist, daß man bei Ressourcen nicht differenzieren kann und es wird immer alles in die EXE gelinkt, was irgendwo im Quellcode gefunden wird, selbst wenn z.B. die Klasse garnicht verwendet/eingelinkt wurde, für welche diese Resource (RES) gedacht war. :cry: @jaenicke: Das Alte/Normale muß natürlich erhalten bleiben, aber wenn ich nur programmintern mehrere Interfaces brauche, dann muß ich auch immer alle Header/Implementationen doppelt schreiben. In soeinem Fall wäre es eben schön, wenn man sich aus allen public/published-Eigenschaften ein Interface generieren lassen könnte
Delphi-Quellcode:
type
TMyClass = class interfaced(TInterfaceObject) // dafür markieren, daß automatisch ein Interface generiert werden kann, bzw. es wird sofort generiert und später nur zugewiesen, beim OF ... end; IMyInterface = interface of TMyClass; IMyInterface2 = interface of TMyClass2;; // per Forward? TMyClass2 = class(TInterfaceObject) ... end; IMyInterface3 = interface of TMyClass3;; // per Forward und manuell TMyClass3 = class(TInterfaceObject, IMyInterface3) ... end; |
AW: Träume, Wünsche und Wahnvorstellungen...
Liste der Anhänge anzeigen (Anzahl: 1)
[FireMonkey]
Die FM-Controls haben eine Eigenschaft "HitTest", mit der man die Controls einfach "mausdurchlässig" machen kann. :thumb: Auch gibt es die Eigenschaft "EnableDragHighlight", mit der man den automatischen Rahmen bei DragOver abschalten kann (im Bild das innere Panel). Optisch ist das nicht schlecht, DragOver und DragDrop wird dennoch behandelt. Bei verschachtelten Controls (z.B. Styles) wäre es schön, wenn man "HitTestDrop" deaktivieren könnte (z.B. für die SubControls). Dann würde auf DragOver immer das "MainControl" reagieren, aber auf Mouseover und Klicks könnten ggf. auch die Subcontrols reagieren. Ich würde das für eine sehr nützliche Funktion halten, die eine sehr viel genauere GUI-Gestaltung ermöglichen würde... [/FireMonkey] |
AW: Träume, Wünsche und Wahnvorstellungen...
Liste der Anhänge anzeigen (Anzahl: 1)
Gerade bisschen verträumt am Programmieren da passiert doch glatt sowas:
Delphi-Quellcode:
FIcon := TIcon.Create.Handle := GetIconHandle;
Erst als der Compiler meckerte habe ich den Fehler gemerkt. jaja :wink: |
AW: Träume, Wünsche und Wahnvorstellungen...
Es wäre schön, wenn die IDE Methoden im Implementationsabschnitt immer in der gleichen Reihenfolge halten würde, wie sie in den Klassendefinitionen im Interfaceabschnitt definiert werden.
Wenn man dort die Reihenfolge ändert sollte dies auch im Quelltext angepasst werden (optional auf Shortcut). |
AW: Träume, Wünsche und Wahnvorstellungen...
Ich wünsche mir die If-Funktion:
Delphi-Quellcode:
Und natürlich gleich noch die Case-Funktion dazu:
// fiktive Berechnung als Beispiel
Zinssatz := (if premiumkunde then Basiszins*0.9 else Basiszins+0.75) - rabattzins;
Delphi-Quellcode:
Man beachte dass man immer den Else-Teil schreiben muss; andernfalls wäre es ein Fehler.
ShowMessage('Sie haben '+
(case idx of 1:'Nichts' 2:'Grass' 3:'Wasser' 4:'Felsen' else 'unbekannt') + 'angeklickt'); |
AW: Träume, Wünsche und Wahnvorstellungen...
Das erste ist doch genau der ternäre Operator aus C!
Code:
Ich habe ihn in den ersten Tagen Delphi auch vermisst, mittlerweile bin ich wirklich froh, den nicht mehr sehen zu müssen. Lieber ein, zwei Zeilen mehr. Dafür erkennt man später in der Hälfte der Zeit, was im Code vor sich geht.
zinssatz = (premiumkunde ? Basiszins*0.9 : Basiszins+0.75) - rabattzins:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
Zitat:
Delphi-Quellcode:
Ggf. kann man noch einen Else-Wert übergeben, wenn gewünscht auch als optionalen Parameter.
function MyCase(idx: Integer; Values: Array of Integer): Integer;
function MyCase(idx: Integer; Values: Array of String): String; overload; ...etc. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 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