![]() |
Komponente entwickelt aber nicht sichtbar..?!
Hallo,
also habe jetzt mal Version 0.1 Beta meine Kompo soweit fertig... doch jetzt der Schock... Wenn ich sie auf Form ziehen will wird sie nicht angezeigt... außerdem heißt es nach dem 2. Versuch, dass der Arbeitsspeicher voll ist....???
Delphi-Quellcode:
Bitte schaut es Euch mal durch .... ich weiß dass das Ding nicht perfekt ist aber ich will jetzt mal für den Anfang nur dass es funct...
unit Stringverwaltung;
interface uses SysUtils, Classes, Dialogs; type TStringVarverwaltung = class(TComponent) private { Private-Deklarationen } cFehler:Boolean; type TVariable = record Name:String; Programm:String; Inhalt:String; Free:Boolean; end; var Variablen: array [1..9999999] of TVariable; function GetFree():integer; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create (AOwner : TComponent) ; override ; published { Published-Deklarationen } property Fehlermeldungen : Boolean read CFehler write CFehler; public Procedure NewVar(Name,Programm,Inhalt:String); public Procedure DelVar(Name,Programm:String); public Procedure DelVarbyProg(Programm:String); public Function GetInhalt(Name,Programm:String):String; end; procedure Register; implementation procedure Register; begin RegisterComponents('BlueRain', [TStringVarverwaltung]); end; constructor TStringVarverwaltung.Create(AOwner : TComponent); var i:integer; begin for i := 1 to 9999999 do begin Variablen[i].Free:=True; end; end; Function TStringVarverwaltung.GetInhalt(Name,Programm:String):String; var i:integer; begin for i := 1 to 9999999 do begin if (Variablen[i].Name=Name) and (Variablen[i].Programm=Programm) then begin Result:=Variablen[i].Inhalt; end; end; end; function TStringVarverwaltung.GetFree():integer; var i, ergebnis:integer; begin Ergebnis:=-1; for I := 1 to 9999999 do begin if Variablen[i].Free=true then begin ergebnis:=i; break; end; end; if ergebnis=-1 then begin if cFehler=true then Messagedlg('Speicherüberlauf bei 9999999+1 -TStringVarVerwaltung-',mterror,[mbok],0); end; Result:=Ergebnis; end; Procedure TStringVarVerwaltung.DelVarbyProg(Programm:String); var i:integer; begin for i := 1 to 9999999 do begin if Variablen[i].Programm=Programm then begin Variablen[i].Name:=''; Variablen[i].Programm:=''; Variablen[i].Inhalt:=''; Variablen[i].Free:=true; end; end; end; Procedure TStringVarVerwaltung.DelVar(Name,Programm:String); var i:integer; begin for i := 1 to 9999999 do begin if (Variablen[i].Name=Name) and (Variablen[i].Programm=Programm) then begin Variablen[i].Name:=''; Variablen[i].Programm:=''; Variablen[i].Inhalt:=''; Variablen[i].Free:=true; end; end; end; Procedure TStringVarverwaltung.NewVar(Name,Programm,Inhalt:String); var index:integer; begin index:=Getfree(); Variablen[index].Name:=Name; Variablen[index].Programm:=Programm; Variablen[index].Inhalt:=Inhalt; Variablen[index].Free:=False; end; end. Danke! |
Re: Komponente entwickelt aber nicht sichtbar..?!
var Variablen: array [1..9999999] of TVariable;
Und du weißt nicht warum der Arbeitsspeicher voll wird? |
Re: Komponente entwickelt aber nicht sichtbar..?!
Wieso nimmst du keine dynamischen Arrays?
|
Re: Komponente entwickelt aber nicht sichtbar..?!
Hallo,
ja ich weiß, dass das nicht sauber ist.... aber es muss ja an was anderem Liegen.... das nimmt sicherlich keine 4 GB in Anspruch.. oder? Trotzdem Danke! Gruß Andy |
Re: Komponente entwickelt aber nicht sichtbar..?!
Hallo Andy,
wenn man einen constructor überschreibt, sollte man auch den geerbten constructor aufrufen. Gruß Hawkeye |
Re: Komponente entwickelt aber nicht sichtbar..?!
Hallo,
sorry du ist meine erste Kompo und kenne mich da nicht aus wie macht man da was? Danke! |
Re: Komponente entwickelt aber nicht sichtbar..?!
MeinName Create;
Und rate mal was mein Name ist ;) <- siehe da |
Re: Komponente entwickelt aber nicht sichtbar..?!
Zitat:
Zitat:
Übrigens kann ein Programm unter Windows nur 2 GB belegen |
Re: Komponente entwickelt aber nicht sichtbar..?!
Hallo,
also gut werde den Array noch dynamisch machen... Danke ;-) Also das hier geht net:
Delphi-Quellcode:
Danke für Eure Hilfe!
constructor TStringVarverwaltung.Create(AOwner : TComponent);
var i:integer; begin inherited Create; //[DCC Fehler] Stringverwaltung.pas(51): E2035 Nicht genügend wirkliche Parameter for i := 1 to 9999999 do begin Variablen[i].Free:=True; end; end; |
Re: Komponente entwickelt aber nicht sichtbar..?!
Delphi-Quellcode:
Warum erzeugst du im Konstruktor schon wieder eine so rrsinnig große Menge an Elementen anstatt zur Laufzeit so viele wie nötig zu erzeugen? das ist doch der Vorteil der dynamsichen Variante.
inherited Create( AOwner);
|
Re: Komponente entwickelt aber nicht sichtbar..?!
Destructor fehlt auch. Die Strings sind im Record sogar doppelt drin. Frage am Rande : seit wann schreibt man im private TYPE rein ? :shock: Um einen Schritt weiter zu kommen würde ich mal zumindest Shortstring verwenden. Unsauber bleibts dann aber immer noch. Konzept ist eben grundsätzlich falsch angelegt. :mrgreen:
@roter Kasten : free wird aufgerufen und nicht zugewiesen. siehe roter Kasten Nr.2. :mrgreen: |
Re: Komponente entwickelt aber nicht sichtbar..?!
Hallo Hansa,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Gruß Hawkeye |
Re: Komponente entwickelt aber nicht sichtbar..?!
Hi,
1. Wozu brauchst du 10 Millionen-1 Strings 2. Wenn man so was macht, dann benutze wie oben angemerkt dynamische Arrays.Die solltest du aber nicht am Anfang in einer Schleife von 1 bis 9999999 initialisieren, sonst hast du doch wieder 10 Millionen-1 Elemente im Array. 3. Du könntest das Ganze auch mit einer doppelt verketteten Liste implementieren und die Objekte erst anlegen, wenn ein Neues gebraucht wird. 4. Fang doch mal klein an, wenn du mal ausprobieren willst, z.B. array[1..99] of TVariable zum Testen. Ciao, Alex |
Re: Komponente entwickelt aber nicht sichtbar..?!
Da ist einiges zu tun :
Zitat:
Zitat:
Zitat:
Durch Reduzierung des Speicherplatzes den Speicherplatz erhöhen ? :shock: Zitat:
|
Re: Komponente entwickelt aber nicht sichtbar..?!
Zitat:
Was soll die Komponente dann letzten Endes machen. Ist ja schrecklich, wie unbedacht Du mit Systemresourcen umgehst. Wenn es nur darum geht, 10 Millionen Datensätze zu verwalten mit Such- und Löschfunktionen, so würde sich eher eine Datenbanktabelle für dein Vorhaben eignen. |
Re: Komponente entwickelt aber nicht sichtbar..?!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz