![]() |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
Verstehe aber nicht, warum du die Benutzung so kritisch siehst, ich glaube das ist reine Geschmackssache. Ohne with weiß man zwar ohne groß zu überlegen ganz genau, zu welchem Object etwas gehört, jedoch wird dadurch auch der Code unübersichtlicher und es wirkt aufgebläht. Mit dem with ist Code wesentlich aufgeräumter und man beschränkt sich stärker auf die wesentlichen Teile. Mir ist schon klar, dass es Probleme geben kann, wenn man die with Anweisungen verschachtelt, da nun einige Methoden überdeckt werden, aber mit geschärftem Blick sieht man dies in der Regel. |
AW: Träume, Wünsche und Wahnvorstellungen...
Ich bitte darum, die "With-Diskussion" (so sie denn sein muss), in einem separaten Thema zu führen. Hier passt's streng genommen nicht her.
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Das Schönste wäre ja, wenn Emba eine "ältere" Version kostenfrei abgeben würde.
Sobald z.B. XE2 rauskommt, könnte man doch eine "nicht upgradberechtigte", "nicht kommerziell nutzbare" und "leicht abgespeckte Proffessional ohne Quellcodes" freigeben? Quasi grob mit den Beschränkungen vom Starter und dafür beim Starter die schlimmsten Beschränkungen "beheben", beim Debuggen und in der Codevervollständigung (welches alles ja selbst im D7 Personal noch ging). Und nein, nicht für mich ... IMHO ist alles unterhalb einer Prof (also Starter) nicht nutzbar. (abgesehn von der subjektiv empfundenen IDE-Stabilität war selbst TDE noch um längen besser "nutzbar") |
AW: Träume, Wünsche und Wahnvorstellungen...
Meine Wahnvorstellung: wenn Emba eine kostenlose Version MIT Quellcodes herausgeben würde - es nervt einfach, wenn Personal, Starter oder was auch immer Benutzer sich eine Masse an Fragen nicht selber beantworten können, weil sie nicht in den Source schauen können.
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
Zitat:
Bei mir geht auch die Mausoverauswertung im Debugger nicht, aber das mag am virtuellen PC liegen, da ich Delphi 7 natürlich nur noch dort habe. |
AW: Träume, Wünsche und Wahnvorstellungen...
Sicher daß es keine Codevervollständigung gab?
Ich war mir jetzt sicher, daß wenigstens das noch drin war. :oops: Aber das mit den Quelltexten war mir wenigstens noch klar. Aber als richtiger Anfänger nutzt man ja nicht viele Befehle und die findest man in einem ordentlichen Tutorial wieder. Für die nächste Stufe hat man mit bis zu 1000€ Gewinn den Preis ja auch schnell wieder rein und bei mehr Budget/Gewinn, lohnt sich sowieso eine Prof. |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Turbodelphi: War für damals sehr gut, man durfte kommerzielle Anwendungen schreiben, war kostenlos -> viele haben das genommen statt ne kostenpflichtige Vollversion -> Negative Auswirkung auf den Gewinn des Unternehmens. Für uns Programmierer war das ganz was Schöned :D
|
AW: Träume, Wünsche und Wahnvorstellungen...
Kann ja sein, dass Turbo Delphi etwas zu freizügig war, aber Delphi Starter ist jetzt das andere extrem. Wenn es sowas wie TDE in aktueller Version gäbe für den Preis von Delphi Starter, würde ich es kaufen. Oder wenn das aktuelle Delphi Starter kostenlos wäre, würde ich es eventuell auch mal damit probieren. Aber für den Preis finde ich Starter zu sehr beschnitten.
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
Viele Grüße, Florian |
AW: Träume, Wünsche und Wahnvorstellungen...
Helper für einfache Typen/Interfaces
und Operatoren/Generics für Helper ... das wäre mal geil |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
doppelt geil? :oops:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Es wird Zeit, dass mal wieder jemand Wahnvorstellungen äußert: :stupid:
Delphi-Quellcode:
{$IFDEF standard OR professional}
FormSchedule.ManualDock(TabSheetSchedule, nil, alNone); FormSchedule.Align := alClient; FormSchedule.Show; {$ENDIF}
Delphi-Quellcode:
EDIT: Und Projektgruppen-Bedingungen, die dann für alle Projekte einer Gruppe gelten.
{$IFDEF (NOT standard) AND (NOT professional)}
FormSchedule.ManualDock(TabSheetSchedule, nil, alNone); FormSchedule.Align := alClient; FormSchedule.Show; {$ENDIF} |
AW: Träume, Wünsche und Wahnvorstellungen...
Da kann Dir der Osterhase ganz schnell helfen:
Delphi-Quellcode:
Zum zweiten Wunsch:
const
Standard = true; Professional = false; [...] {$IF Standard or Professional} ShowMessage('Gute Wahl!'); {$ELSE} ShowMessage('Pech gehabt...'); {$IFEND} [...] {$IF (NOT standard) AND (NOT professional)} ShowMessage('Geizhals!'); {$IFEND} Weshalb packst Du die Bedingungen nicht in eine zentrale pas- oder was-auch-immer-Datei und lädst sie in jedem Projekt (der Gruppe) per {$INCLUDE ...}-Anweisung? |
AW: Träume, Wünsche und Wahnvorstellungen...
Gibt es, zumindestens hatte ich sowas mal im D7 gesehn (glaub ich).
Ich find's nur nicht mehr. :cry: Das war eine Funktion/Prozedur, welche aus 3 oder 4 DWORD-Werten die Personality bestimmt. Wurde/wird von Features geprüft, welche für höhere Personalities bestimmt war, also erst bei Nutzung dieses Features, im laufenden Programm. z.B. man kompiliert irgend ein Datenbankfeature ein, welches erst ab der Enterprise möglich ist, aber man nutzt nur 'ne Personal/Standard. Eventuell wurde es ja ausgebaut und man löst das nun anders. :gruebel: constants: RTLVersion CompilerVersion GPL (Programm wurde so kompiliert, daß die DelphiRTL/VCL mit der GPL kompatibel ist ... stammt wohl irgendwie vom Kylix) compiler switches: UNICODE PUREPASCAL MSWINDOWS POSIX (MACOSX or LINUX) MACOSX LINUX TRIAL_EDITION (k.A. ob das jetzt auch noch gesetzt wird) {$IFDEF TRIAL_EDITION} or {$IF Declared(System._Expired)} _Expired; // show the state of trial licence [edit] ups falsch verstanden.
Delphi-Quellcode:
Es gibt auch noch Declared, für Variablen, Konstanten, Typen und Funktionen/Prozeduren.
{$DEFINE Standard}
{$IF Defined(Standard) or Defined(Professional)} ShowMessage('Gute Wahl!'); {$ELSE} ShowMessage('Pech gehabt...'); {$IFEND} [...] {$IF NOT Defined(Standard) AND NOT Defined(Professional)} ShowMessage('Geizhals!'); {$IFEND}
Delphi-Quellcode:
{$IF not Declared(MyProc)}
procedure MyProc; begin end; {$IFEND} |
AW: Träume, Wünsche und Wahnvorstellungen...
Sagt mal, liebe Leute, gibt es eigentlich inzwischen in Delphi ein {$IFDEF}DelphiXUp{$ENDIF}, das Delphi direkt unterstützt?
Dieses DelphiXUp ist nach meiner Beobachtung immer eine "zurechtgebastelte" Variable, die mit jeder neuen Delphiversion immer wieder aktualisiert werden muß (mit dem Hinzufügen eines neuen, weiteren VERXXX). Schön wäre es (gewesen), wenn jedes Delphi von sich aus erkennen würde, ob die Version(snummer) des Compilers für den Quelltext ausreicht, anhand einer Variablen, die die Mindestvoraussetzung (ab welcher Versionsnummer) des Compilers beinhaltet. Vielleicht gibt es das alles auch schon längst, keine Ahnung. |
AW: Träume, Wünsche und Wahnvorstellungen...
Oh, ich wusste nicht, dass man auch Konstanten auswerten kann...
Thom hat mir schon alle meine Träume erfüllt. :thumb:
Delphi-Quellcode:
const // global definiert, aber gut praktikabel so
CompileModeFree = 0; CompileModeLight = 1; CompileModeStandard = 2; CompileModeProfessional = 3; CompileMode = CompileModeLight; ... procedure TdmlStahliSport.MIPlayerStatistcsClick(Sender: TObject); {$IF CompileMode > CompileModeFree} var PanelPlayer: TodPanelPlayer; {$IFEND} begin {$IF CompileMode > CompileModeFree} if PopupMenuPlayer.PopupComponent is TodPanelPlayer then begin PanelPlayer := PopupMenuPlayer.PopupComponent as TodPanelPlayer; PanelPlayer.odPlayer.Person.ExportVPEGamesOpen; PanelPlayer.odPlayer.Person.ExportVPEGames; PanelPlayer.odPlayer.Person.ExportVPEGamesClose; end; {$IFEND} end; |
AW: Träume, Wünsche und Wahnvorstellungen...
@Delphi-Laie:
Na ja - das "Erkennen", ob ein Feature zur Verfügung steht, besteht ja darin, daß der Compiler anfängt, mehr oder weniger lange Fehlerlisten zu produzieren. Viel schlimmer ist meines Erachtens der Umstand, daß manche Dinge bei älteren Compilerversionen anders oder (noch) fehlerhalft implementiert ist. Das betrifft zum Beispiel die richtige Auswahl überladenen Methoden oder die Behandlung von Variant-Werten. Will (oder muß) man abwärtskompatibel sein, führt meiner Meinung nach nichts am exzessiven Gebrauch von Compilerschaltern vorbei, wobei ja leider nicht alle älteren Versionen die Variable CompilerVersion unterstützen. Damit wäre es dann einfach, Delphi XE4 schon jetzt zu erkennen:
Delphi-Quellcode:
{$IF CompilerVersion=25.0}
ShowMessage('Jetzt habe ich es endlich!'); {$IFEND} @stahli: Das freut mich! :-D |
AW: Träume, Wünsche und Wahnvorstellungen...
Die Konstante CompilerVersion ist bestimmt schon recht lange vorhanden,
aber die Conditional-Expressions (
Delphi-Quellcode:
) gibt es nicht überall. (in D4 noch nicht, in D7 schon ... aber alles Ältere als D7 wird einfach ignoriert)
{$IF ...}
Ich würde mir ein
Delphi-Quellcode:
für längere Schalternamen wünschen. (nicht nur für die Einbuchstabigen mit + oder -)
{$IFOPT ...}
|
AW: Träume, Wünsche und Wahnvorstellungen...
Was ich mir wünschen würde und was für mich ein Kaufargument wäre:
- aussagekräftigere integrierte Hilfe mit viiiieeeel mehr Beispielprogrammen zum Hilfethema. - kommentierte Demoprogramme - mehr Projektvorlagen zu gängigen Softwareproblemklassen - Schlankere IDE, die dann schneller startet und Komponenten dann nachlädt, wenn ich sie auf dem Formular platziere, um die IDE schlank zu halten - güntigeren Preis .) |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Man hat das ja mit dem neuen Databinding von XE2 versucht
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
naja und die Traumliste:
Ich stimme Punkt 1 und 3 zu. Entschlackung würde die IDE schneller starten lassen. Es könnten auch erst später benötigte Teile erst dann nachgeladen werden, wenn wirklich gebraucht. Für Konsolenanwendung wird der GUI Designer nicht gebraucht. Ob er gebraucht wird, entscheidet sich so erst nach dem Start und nach meiner Auswahl der Art der zu entwickelnden Anwendung. Analog verhält es sich mit anderen Funktionen der IDE. |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
ein Delphi, das sich auf einem Internetserver mit nutzerspezifischen Einstellungen installieren lässt, mit ausdrücklicher Absicht, dieses Produkt dann weiter zu vermieten, indem der Mieter sich auf der Internetseite registriert, das Nutzungsentgelt bezahlt und dann Delphi von der Webseite aus nutzen kann. Die Frage ist allerdings, wieviele Euronen ein Programmierer bereit wäre, hierfür zu berappen. Immerhin hätte dieser dann immer ein aktuelles Delphi, verschlüsselte Ordner für seine Projekte, weitere Werkzeuge, vielleicht aufgabenabhängig und damit preislich gestaffelt und vieles mehr. |
AW: Träume, Wünsche und Wahnvorstellungen...
Zitat:
|
AW: Träume, Wünsche und Wahnvorstellungen...
Hach, wie schön könnte das Programmiererleben doch sein. *träum*
Delphi-Quellcode:
type
TMyClass = class interfaced(TInterfacedObject) private FAbc: Integer; procedure SetAbc(Value: Integer); public procedure Xyz; property Abc: Integer read FAbc write SetAbc; // es wird automatisch ein Getter mit Result:=FAbc; angelegt end; Oder wer will es wirklich so schreiben?
Delphi-Quellcode:
type
IIntMyClass = interface function GetAbc: Integer; procedure SetAbc(Value: Integer); end; IMyClass = interface(IIntMyClass) procedure Xyz; property Abc: Integer read GetAbc write SetAbc; end; TMyClass = class(TInterfacedObject, IMyClass) private FAbc: Integer; function GetAbc: Integer; procedure SetAbc(Value: Integer); public procedure Xyz; property Abc: Integer read GetAbc write SetAbc; end; |
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 09:51 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