![]() |
Aha Momente
Vor einer kurzen Weile hatte ich mir selber was Ähnliches gebaut.
Und gerade, auf der Suche nach was Anderem, über was gestolpert und dachte mir *na toll, jetzt* ![]() ![]() [edit] ![]() ![]() |
AW: Aha Momente
Gibts inzwischen eigentlich einen generischen TStream<T>?
|
AW: Aha Momente
Wie sollte ein generischer TStream<T> funktionieren?
|
AW: Aha Momente
Das erinnert mich an das alte "file of" Konstrukt. Mit beliebigen generischen Typen würde das allerdings nicht funktionieren.
Die Idee verstehe ich durchaus, aber ich sehe keine Möglichkeit einer Umsetzung. Im Grunde wäre die Anforderung quasi ein ORM auf Streambasis... |
AW: Aha Momente
Die einzige Möglichkeit die ich sehe ist sowas:
Delphi-Quellcode:
Aber das hilft auch nicht soo viel.
IStreamable = interface
procedure LoadFromStream(Stream: TStream); procedure SaveToStream(Stream: TStream); end; TStream<T: IStreamable> = class(TCustomMemoryStream) // ... end; |
AW: Aha Momente
Binäre Daten sind eh bissl blöd.
Wenn, dann vielleicht ein ORM um TReader/TWriter (zwar auch binär, aber inkl. Formatierungdaten und optional auch als Text-Version) Aber dann vielleicht eher in Richtung BSON (binäres JSON) oder CompressedXML, wobei man TReader (das was die DFMs im Delphi nutzen) auch als typsicherere Variante des JSON/BSON ansehen könnte. |
AW: Aha Momente
Wofür ist ein TPointerStream nützlich?
|
AW: Aha Momente
Damit du mit den Methoden eines Streams, und Allem was Streams unterstützt, im Speicher von irgendwas Anderem rumwurschteln kannst.
Also du bekommst z.B. von einer API einen Buffer (x Bytes) und kannst direkt mit diesem Speicher (ohne umzukopieren) das dennoch als Stream verarbeiten. Du kannst damit auch in einem anderen TMemoryStream/TBytesStream (in dessen Speicher oder "sicher" nur einem Teil davon) mit einem weiteren Stream arbeiten usw. Das macht es Einfacher Dinge zu verschachteln und spart Arbeit/Speicher ... z.B. wenn in einem großen Stream mehrere Bilde drin stecken, dann auf den gewünschten Teil den PointerStream drauf und das dann an LoadFromStream von irgendwas, ohne vorher umzukopieren. |
AW: Aha Momente
Sowas hab ich 2010 programmiert und hier hochgeladen (TVirtualStream):
![]() Ist sogar in der JWSCL gelandet :) ![]() |
AW: Aha Momente
Zitat:
|
AW: Aha Momente
Zitat:
Ich meine man könnte vllt. mit Reflection/RTTI was machen, aber ob da am Ende das rauskommt was man gerne hätte ist fraglich. |
AW: Aha Momente
Zitat:
|
AW: Aha Momente
Gehen täte es schon, aber nicht "generell" für "alle" Datentypen.
Zitat:
|
AW: Aha Momente
|
AW: Aha Momente
BJSON/BSON ist technisch schon ein bissl wie die DFM im Delphi
Ein Byte für den Typ und dann die Daten, also in den Daten steht drinne, wie man sie interpretiert. Zitat:
|
AW: Aha Momente
Im Buch "Algorithms and Data Structures" (von 2001, zweite Auflage von 2006) beschreibt Julian Bucknall ein sich selbst dokumentierendes Dateiformat. Das ist ein File of Records, welches zusätzlich einen Header enthält, der den Record beschreibt. Wenn man die Struktur dieses Headers kennt, kann man einen generischen Reader dafür schreiben (und theoretisch auch einen Editor)
In der Firma benutzen wir ein auf dieser Idee basierendes Dateiformat, welches noch zusätzliche Angaben zur Datei und außerdem eine Prüfsumme im Header enthält. Das ist extrem praktisch, da unser Reader dafür beliebige unserer Datendateien anzeigen und auch grafisch darstellen kann. Hauptvorteil: Durch binäres Format deutlich kleinere Dateien als in irgendwelchen Textformaten. |
AW: Aha Momente
Jo, kleiner, aber vorallem auch schneller/einfacher zu lesen, weil man nichts erst parsen muß, bzw. auch Fehlerunanfälliger (besonders, wenn auch noch inkl. Prüfsumme).
Binäre-DFM, BSON, CompressedXML, ... Text-DFM, JSON, XML, ... |
AW: Aha Momente
Zitat:
Ja, ich habe so etwas auch schon selbst geschrieben, aber damals kannte ich Datenbanken, z.B. eben auch einfache dateibasierte Datenbanken, noch nicht. Die machen ja genau das, was du dort beschrieben hast (ja, ohne Unterstrukturen, ich weiß). Und darauf aufsetzende ORMs können dann auch damit arbeiten. |
AW: Aha Momente
Zitat:
|
AW: Aha Momente
Zitat:
|
AW: Aha Momente
Ja, das stimmt. Meine Variante war auch sehr schnell.
|
AW: Aha Momente
Zitat:
Zitat:
|
AW: Aha Momente
Ein schönes Aha ist toll,
aber es geht auch andersrum. :cry: ![]() Je öfter man drauf guckt, um so schlimmer wird es. Ich guck heute lieber nicht mehr in meine eigenen Codes. Hatte bestimmt zu oft in der Hilfe abgeguckt. :freak: |
AW: Aha Momente
Hatte auch gerade einen Aha-Moment und bin immer noch völlig irritiert, weil man
Delphi-Quellcode:
auch mit einem Integer als Argument aufrufen kann, sofern es sich bei dem Integer nicht um ein Literal handelt.
function Wupp(Di: array of Integer): string;
Delphi-Quellcode:
Kompiliert (und führt zu einem Stapelüberlauf, sofern keine überladene Version für
function Wupp(Di: array of Integer);
begin Result := Wupp(Di[0]); end;
Delphi-Quellcode:
existiert).
Di: Integer
Welchen Sinn hat das? |
AW: Aha Momente
Über den Sinn zu diskutieren ist müßig.
Zumindest ist es ![]() Zitat:
|
AW: Aha Momente
Danke, den Artikel der Hilfe hatte ich irgendwie nicht gefunden. Hatte nach "Argumente" und nach "Methoden" gesucht.
|
AW: Aha Momente
Ich finde es nur nervig, wenn der Compiler immer wieder ein [1,2,3,...] als Enum interpretiert, obwohl er merken müsste, dass links vom := oder als Zieltyp des Parameters oder Operators ein Array vorgegeben ist.
Bzw. das er bei zu großen oder kleinen (negativen) Werten nicht von selber auf die Idee kommt es mal mit einem Array statt Enum zu versuchen, wo er Einem ja nur noch ein "out of range" um die Ohren werfen kann/tut. Dass man das [] beim Aufruf weglassen kann ... Ohhh, wusste ich noch garnicht. machte mir immer die Mühe und schereibe die [ ] drumrum und verschwendete so bisher massenhafft Festplattenspeicher. :cry: |
AW: Aha Momente
Mich stört im Zusammenhang mit Enums eher, dass wie oben erwähnt Bezeichner in offene Arrays konvertiert werden, Enums aber nicht in Sets. Zum einen als Methodenparameter, zum andere beim Plus-Operator: Set + Enum geht nicht, es muss Set + Set heißen.
|
AW: Aha Momente
Ja, da hätte man den Operator überladen können, mit SET und ENUM.
Im Gegenzug kann man beim Include nur Einen aber nicht mehrere ENUMs verwenden. :stupid::lol: Ich weiß nicht, ob man einen Record-Helper auch um Operatoren erweitern kann, um es selber zu machen. Beim Array machen sie die [ implizit drum, warum dann nicht auch bei + :?: Ich wollte noch einen Feature-Request machen, dass der Compiler Type/Enum-Namespaces implizit einbezieht/bevorzugt. Wenn der Compiler und CodeCompletion in einer Zuweisung := oder als Zieltyp für Paramerter und Property einen Enum/Set erkennt, warum kann er dann nicht diesen Typ als erstes in der Suchreihenfolge haben, auch implizit für ScopedEnums ... bzw. eigentlich für alle Typen, nicht nur Enums. |
AW: Aha Momente
Hatte kürzlich in einer (dynamisch erzeugten Form) ein THeaderControl eingefügt mit
Delphi-Quellcode:
Als ich dann das HeaderControl an eine bestimmte Position stellen wollte
fHeaderControl := THeaderControl.Create(Self);
Delphi-Quellcode:
funktionierte das nicht.
fHeaderControl.SetBounds(L, T, W, H)
Die Höhe wurde gesetzt, Left, Top, Width blieben unverändert. Auch der Versuch, alle Parameter separat zu setzen, brachten das gleiche Resultat. Hab dann einen längeren Thread verfasst, um Hilfe zu kriegen. Gerade als ich "Thema erstellen" klicken wollte, erinnerte ich mich daran, dass ich mich immer geärgert hatte, wenn ich in der IDE ein HeaderControl in ein Formular eingefügt hatte, dieses am oberen Rand der Form erschien, weil Align defaultmäßig auf alTop gesetzt wird. Ein
Delphi-Quellcode:
löste das Problem.
Align := alNone;
"Aha Moment". |
AW: Aha Momente
Zitat:
|
AW: Aha Momente
Zitat:
Ja, ist (und war) mir schon klar. Bei TStatusBar finde ich das auch gut so, auch wenn ich schon Projekte mit 2 StatusBars hatte, eine oben und die andere unten. Aber ein HeaderControl wird ja i.d.R. im Zusammenhang mit ListBoxen verwendet, und die reichen ja auch defaultmäßig nicht von Rand zu Rand. Ich wollte mit meinem Beitrag auch keine Kritik üben, sondern lediglich einen "Aha Moment" (Titel des Threads) schildern. |
AW: Aha Momente
Manchmal steht man einfach auf dem Schlauch.
Im FMX letztens ein Memo alBottom in den WebBrowser gelegt, anstatt darunter und mich dann gewundert, dass es zur Laufzeit nicht sichtbar ist. So, hatte meine Dashboards und Filter im Jira endlich mal bissl überarbeitet und dachte auch erst "maaaa, warum geht das denn nicht" ... schon das halbe Internet durchsucht ... und am Ende einfach übersehn, dass dort nur ein winziges Häkchen fehlte, die Sortierung falschrum war, aber der Filter doch richtig funktionierte. :wall: Aha da sind sie ja, die Spammer Markus, Stefan, Uwe und der Kein :lol: Funktioniert meine neue angefangene Wunschliste denn? Uwe, wie bekommst du denn 3 Zeilen hin? schon seit Jahren fängt die bei mir schon ab mehr als 2 Zeilen an zu meckern, dass maximal 3 gehen. :freak: |
AW: Aha Momente
Zitat:
|
AW: Aha Momente
deine Signatur :lol:
|
AW: Aha Momente
Habe ich einfach so eingegeben..
|
AW: Aha Momente
Liste der Anhänge anzeigen (Anzahl: 1)
:cry: bei mir meckert es immer, wenn mehr als 2 Zeilen.
Manchmal sind es eher aaaaarrrrrrrrrrggggggg-Momonente erst hängt man in einer "neuen" API fest ... wo es kaum und oft falsche Dokumentenation/Beispiele gibt und nun wo es langsam läuft ... an einigen Stellen macht selbst schon Windows 10 was anderes, als die Win10 Doku sagt (will noch garnicht an doe 11 denken) und dann eben immer wieder so Zeugs, mit neuen "coolen" Einstellungen und falschen Typen, wo es dann ab und an mal unverhofft knallt ![]() oder siehe hier der Screenshotthread, mit den Überlaufexceptions. :freak: https://www.facebook.com/googlecloud/photos/a.498496087218638/1466800933721477/?type=3 eigentlich hatte ich diese zerknautschte arrg-schwarz-weiß-gesichstsstrichzeichnung gesucht ... ihr kennt die bestimmt, aber fand sie nicht mehr |
AW: Aha Momente
Zitat:
|
AW: Aha Momente
nja, hatte schon vieles probiert ... nix half :cry:
alljährliches hohoho hahaha ![]() schnell kaufen ... ist heute einen Euro günster, als wie letzte Woche. Bei Amazon-BFW leider verpasst ... kurz vor Mitternacht geguckt und plötzlich war's teurer :cry: ... da waren es mal wirklich fast 20% unterm Preis, was Idealo zum letzten Jahr zu sagte. Nja, wie war das letztens im Saturn-Werbespot? bis 60 Prozent Rabat ... bla bla bla Ja nee, wer's glaubt, wird seelig. Prozente gegen die UVP, aber der Preis immernoch höher, als wie vor der Black Friday Week, bzw. wie der durchschnittliche Preis im letzten halben Jahr. :freak: |
AW: Aha Momente
Liste der Anhänge anzeigen (Anzahl: 1)
Der Aha-Moment ist bei bisher bei mir ausgeblieben. Da musst du mir mal helfen. Der kommt erst wenn ich verstanden habe wie man für eine altmodische MAUS (nur ansersrum) mit Ball der immer verdreckt 587€ ausgeben kann!
Anhang 55604 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 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