![]() |
System.Generics.Collections fehlt mir
Halli hallo,
ich versuche krampfhaft eine sehr umfangreiche komponente nach delphi version 7 zu portieren nur greift das original extrem oft auf die System.Generics.Collections unit zu. Hat eventuell schonmal jemand diese unit nach Delphi 7 portiert? (da mir diese fehlt) Den rest des originals kann ich ohne weitere hindernisse selber hinbekommen aber all diese TArray, TObjectQueue usw aufrufe, mit denen kann ich gerade gar nichts anfangen. Grüße ps: in welcher Delphi Version wurde System.Generics.Collections eingeführt? |
AW: System.Generics.Collections fehlt mir
Vergisses, der Delphi 7 Compiler kann keine Generics.
|
AW: System.Generics.Collections fehlt mir
Zitat:
Da bleibt oft nur nach alter Manier zu casten was das Zeug hält. Aber umbauen musst du da vermutlich einiges. Das habe ich auch durch (mit einem sehr kleinen Projekt), aber ich habe mit IFDEFs gearbeitet, damit in neueren Delphiversionen Generics verwendet werden: ![]() Die History ist dort ja einsehbar. Das war auch ein ziemlicher Aufwand, vor allem weil die verwendeten Features bezüglich Generics nicht einmal in Delphi 2009 funktionierten, sondern erst mit XE6 oder so voll... Zitat:
|
Dieses Thema wurde am "31. Jan 2018, 08:35 Uhr" von "Daniel" aus dem Forum "Klatsch und Tratsch" in das Forum "Sonstige Fragen zu Delphi" verschoben.
|
AW: System.Generics.Collections fehlt mir
Zitat:
Wo ein Wille ist gibt's einen Weg. Da ich das unbedingt haben möchte, ist mein Wille stark oder sturr, such's Dir aus (-; @jaenicke: Vielen lieben Dank, da hab ich wenigstens einen Ansatz!! Ich besorg mir mal von XE4 die .Generics und seh zu das ich das hinbekomme (Danke für den ab 2009 Hinweis!) @Admin: Danke für's versetzen des Themas, ich wusst echt nicht wohin :) Grüße |
AW: System.Generics.Collections fehlt mir
Zitat:
Ich glaube dir ist nicht klar was Generics sind... wenn nicht, solltest du dir das erst einmal anschauen bevor du weitermachst. |
AW: System.Generics.Collections fehlt mir
Zitat:
Für die Umsetzung von Generics muss auch der Compiler seinen Teil beisteuern. Und der von Delphi 7 ist dazu nicht in der Lage. Natürlich wirst Du irgendwelche Collections erstellen können - aber das wird sich nicht mit dem decken, was man im Allgemeinen unter "Generics" versteht. Ich empfehle hier etwas Lektüre, bevor Du Dich derart aus dem Fenster lehnst. |
AW: System.Generics.Collections fehlt mir
Zitat:
Warum geht dann unter Delphi 2010 so etwas?
Delphi-Quellcode:
EDIT:
g_Obj: TArray<TgObj>;
g_Prop: TArray<TProp>; Was ich aber nicht verstehe warum TBlup<T> in der Unit System definiert ist und nicht in Generics.Collections gruss |
AW: System.Generics.Collections fehlt mir
.. der TE hat Delphi 7, da funktioniert das nicht.
Grüße Klaus |
AW: System.Generics.Collections fehlt mir
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: System.Generics.Collections fehlt mir
Irgendwie sind deine Beiträge immer komisch.
Erst schreibst du sowas wie Zitat:
Und später im Verlauf schreibst du immer Dinge wie Zitat:
Zitat:
|
AW: System.Generics.Collections fehlt mir
Ich würde dir empfehlen wenn du keine riesen Installation vornehmen willst.
Migriere zu D2010 die EXE Dateien sind dann zwar doppelt so groß wie unter D7 aber immer noch besser als ein vielfaches von D7 wie unter Berlin. gruss |
AW: System.Generics.Collections fehlt mir
@alle: ich wollt ja nicht eine System.Generics nachbauen, sondern eine xyz.pas unit erstellen die die komponente akzeptiert um bei mir lauffähig zu sein auch wenn ich System/SysInit oder was auch immer alles nötig sein mag um das hinzubekommen machen muss. Ich bin da echt sturr oder eisern.
(starter edition nutzen und es klappt vermutlich auf anhieb, aber ich mag es partout nicht) Über's Wochenende arbeite ich mich mal in das Thema rein und nein mit TBulb hatte ich noch nichts zu schaffen, zeit das ich das nachhole. Alles wird gut. Grüße |
AW: System.Generics.Collections fehlt mir
Zitat:
Ich bekomms nicht in meinen Schädel rein, wieso alle die neuen Starter-Versionen so unglaublich hassen. Es ist doch ehrlich gesagt sch**** egal, ob eine Exe nun 1 MB oder 4 MB groß ist. Wir sind im Jahr 2018, nicht 1980 ;) |
AW: System.Generics.Collections fehlt mir
Da ich beruflich viel mit Kompression zu tun habe ist igrendwie der Satz "Size Matters" hängengeblieben.
Beantwortet das dein Frage? |
AW: System.Generics.Collections fehlt mir
Zitat:
Es hat damit nichts zu tun ob die Datei mit 1 oder 4MB erstellt wird. Ausschlaggebend ist doch einfach welche Ansprüche stelle ich. Ich programmiere hauptsächlich NonVcl. Was soll ich also mit so einer aufgeblasenen IDE und Hunderte von Möglichkeiten wenn ich nur mit der Win32API arbeite. Ich brauche keine mobile Unterstützung, kein Touch kein 64Bit usw... Das ist mein Grund.. hat nichts mit hass zu tun. EDIT: Also kurz gesagt nur eine frage der Anforderung die man sich selbst stellt. gruss |
AW: System.Generics.Collections fehlt mir
2009 kann auch schon Generics und macht kleinere Dateien als 2010.
|
AW: System.Generics.Collections fehlt mir
Zitat:
|
AW: System.Generics.Collections fehlt mir
Zitat:
Sorry der Beitrag war unnötig. Zitat:
Und wie viel GB muss ich dafür installieren? Selbst im Jahr 2018 werden neue Heizungen installiert die darauf aus sind Ressourcen zu sparen. Man sollte sich mal wieder darauf besinnen und nicht so verschwenderisch leben. Bit und Bytes kosten ja nichts oder vielleicht doch? gruss |
AW: System.Generics.Collections fehlt mir
Ging an den OP, wenn es darum geht, ihm irgendwas zu empfehlen.
Mir sind keine nennenswerten Fehler in 2009 bekannt, auch nicht mit Generics. Zitat:
|
AW: System.Generics.Collections fehlt mir
Die Diskussion ist müßig und hier völlig fehl am Platze.
Es mag für den Fragesteller leichter sein, die externe Unit anzupassen, so dass diese keine Generics mehr verwendet als irgendwas "Generics-ähnliches" in D7 zu realisieren, was am Ende auch nicht vollends zu einer Unit kompatibel sein kann, welche die richtigen Generics von Delphi2009 ff. voraussetzt. |
AW: System.Generics.Collections fehlt mir
![]() Wäre das gut genug um bei den großen mitspielen zu können? Grüße |
AW: System.Generics.Collections fehlt mir
Du brauchst dafür eine Lizenz. Auch eine Demo braucht eine Lizenz.
Die einfachste Variante, Pseudo-Generics zu verwenden, ist TObjectList/Stack/Queue zu nehmen und alle zu speichernden Typen von TObject abzuleiten. Dann fällt aber der große Vorteil von Delphi-Generics weg, anders als bei minderwertigen Programmiersprachen wie Java auch Primitive und andere nicht auf Klassen basierende Datentypen (string, TPoint usw.) ohne Aufwand aufzunehmen. Beim Thema Generics.Collections.TDictionary bist du natürlich immer noch aufgeschmissen. |
AW: System.Generics.Collections fehlt mir
Zitat:
Dafür muss man in dem Projekt auf die Version vorher zurückspringen (vor dem Kommentar mit der Unterstützung für Delphi 7) und dann versuchen das unter Delphi 2009 oder 2010 zum Laufen zu bekommen. Ich musste ziemlich viel davon wegnehmen. Deshalb: Die absoluten Basics mit Generics funktionieren ab Delphi 2009 (für dich wird das auch erstmal reichen), aber wirklich gut mit allen Features kann man damit erst ab etwa XE8 arbeiten. |
AW: System.Generics.Collections fehlt mir
Zitat:
|
AW: System.Generics.Collections fehlt mir
Danke für die Hinweise!
Ich lad gerade D2010 herunter, Lizenz ist beantragt (ich soll wohl eine slip datei per email erhalten) Damit hat sich dann hoffentlich das thema "hol starter etc" erledigt und ich kann Tokyo kompatiblen Code erschaffen ohne all die Unicode problematik die ich momentan wegen D7 auch noch am Hals hab. Beste Grüße und weiterhin viel Erfolg! |
AW: System.Generics.Collections fehlt mir
Zitat:
Delphi-Quellcode:
Das funktioniert ab XE problemlos. Unter Delphi 2010 jedoch nicht... Da muss man casten:
function TMtclDialogThread.Get<T>(const AControlID: Integer): T;
var ResultControl: TMtclBaseControl; begin if FControlsByID.TryGetValue(AControlID, ResultControl) and (ResultControl is T) then Result := T(ResultControl) else Result := nil; end;
Delphi-Quellcode:
// EDIT:
function TMtclDialogThread.Get<T>(const AControlID: Integer): T;
var ResultControl: TMtclBaseControl; begin if FControlsByID.TryGetValue(AControlID, ResultControl) and (ResultControl is TClass(T)) then Result := T(ResultControl) else Result := TValue.Empty.AsType<T>; end; Oder (ich glaube das geht erst ab XE6 oder so):
Delphi-Quellcode:
Das musste ich dann so machen:
function TMtclDialogThread.GetNew<T>: T;
var ResultControl: T; begin TThread.Synchronize(Self, procedure begin ResultControl := T.Create(Self.Handle, Self.GetNewControlID); end); Result := ResultControl; end;
Delphi-Quellcode:
function TMtclDialogThread.GetNew<T>: T;
var ResultControl: TMtclBaseControl; begin TThread.Synchronize(Self, procedure begin ResultControl := TMtclBaseControlClass(T).Create(Self.Handle, Self.GetNewControlID); end); Result := T(ResultControl); end; |
AW: System.Generics.Collections fehlt mir
Zitat:
|
AW: System.Generics.Collections fehlt mir
Zitat:
Sherlock |
AW: System.Generics.Collections fehlt mir
Damit der Padawan dennoch bei seinem Delphi 7 bleiben kann hat er auch schon einen Plan,
mit neuerem Delphi eine .dll mit der Komponente erstellen aber Hauptprogramm bleibt D7. Hir noch ein paahr schriebfahler zum lachen tot. Grüße |
AW: System.Generics.Collections fehlt mir
Zitat:
Ich musste mich auch erst daran gewöhnen. EDIT: Aber wie schon gesagt wurde der Compiler packt das nicht unter D7 auch nicht mit einer DLL gruss |
AW: System.Generics.Collections fehlt mir
Zitat:
Stevie machte sich bestimmt nicht über den Vertipper lustig :) |
AW: System.Generics.Collections fehlt mir
Zitat:
Ich bin auch kein großer Fan der Starter Edition, aber wenn du Generics brauchst dann besorg dir eine aktuelle(re) Delphi Version und arbeite damit. Ob das jetzt eine Starter ist oder du Geld bezahlst sei mal dahin gestellt. Oder such dir eine Komponente die keine Generics enthält oder schreib die Komponente um sodass sie keine Generics benutzt. Oder schreib dir die Komponente selbst. Aber durch deine Engstirnigkeit mit aller Gewalt bei Delphi 7 bleiben zu wollen (aus größtenteils vollkommen irrelevanten bzw. künstlichen Gründen) machst du nicht mehr als dich selbst einzuschränken und zu behindern. Und um es einfach noch mal gesagt zu haben: Du kriegst deinem Delphi 7 keine Generics beigebracht. Da kannst du dich auf den Kopf stellen. Zitat:
|
AW: System.Generics.Collections fehlt mir
Ich habe das schon machen mussen mit einer DLL. Hab eine alte Report-Komponente (Shazam, von 1998), die an hunderten von stellen im Programm genutzt wird und ich hab einfach nicht die zeit gehabt, alle auf FastReport umzuschrieben, als wir auf UniCode (Delphi XE) umgestiegen sind (von Delphi 2007). Hab eine DLL geschrieben, an die ich dann die anfrage schicke, welcher Report zu öffnen ist von welcher DB und dann blende ich das Fenster in meinem Hauptoprogramm in einem leeren Fenster ein. Kunden glücklich, die lieben das Teil und ich tausche den Code langsam aus :D
Die DLL ist in Delphi 2007 kompiliert, das Hauptprogramm in Berlin :) |
AW: System.Generics.Collections fehlt mir
Zitat:
die es unter neueren Delphi Versionen ermöglichen mit den generics arbeiten zu können. Aber gut wenn dem nicht so ist warum schiebt man den Compiler vor? Sei's drum wenn es geht fein.. ;) gruss |
AW: System.Generics.Collections fehlt mir
Zitat:
Die DLL die er kompilieren würde ja die Delphi 2010 Runtime enthalten. Das Programm dass die DLL lädt muss ja nix über die DLL wissen oder den Code der DLL übersetzen können. Du kannst dann halt nur keine generischen Objekte/Interfaces an das Delphi 7 Programm zurückgeben. Aber falls die Generics nur intern in der Komponente genutzt werden sollte es klappen. |
AW: System.Generics.Collections fehlt mir
OK! Da muss ich dir recht geben. :thumb:
Habe ich nicht bedacht mit der Runtime. gruss |
AW: System.Generics.Collections fehlt mir
Ich sehe es locker, fühle mich nicht angegriffen, wollte nur einen Lacher auf diese Weise loswerden.
Andersrum hab ich es schon desöfteren gemacht (Delphi7 .dll in Tokyo .exe benutzt) Falls es am Ende tatsächlich nicht so klappt wie ich es mir wünsche, kann ich ja bei D2010 bleiben und D7 nach und nach einmotten. Grüße ps: nicht um euch zu verwirren, die Firma in der ich arbeite hat/nutzt Tokyo. (XE4 und XE8 liegt dort auch rum) edit: die komponente arbeitet nur intern mit den Generics |
AW: System.Generics.Collections fehlt mir
Solange es keine visuelle Komponente ist, sollte das über die DLL problemlos gehen, ja. Bei visuellen Komponenten könntest du da Probleme haben.
|
AW: System.Generics.Collections fehlt mir
Es werden nur Werte ermittelt per Komponente (nonVCL), ich würd per DLL eine Procedure erstellen die mir diese werte übermittelt. Solangsam versteh ich auch mehr und mehr was das alles bedeutet dank dok/wiki/emba
Die Generics sind ja echt eine komplexe sammlung verschiedenster dinge. Ich versteh auch mehr und mehr wieso die komponente sie einsetzt, hilft enorm/kürzt vieles/bietet hier und da was nettes. Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 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