Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente entwickelt aber nicht sichtbar..?! (https://www.delphipraxis.net/91983-komponente-entwickelt-aber-nicht-sichtbar.html)

Dragon27 12. Mai 2007 19:41


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:
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.
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...

Danke!

brechi 12. Mai 2007 19:44

Re: Komponente entwickelt aber nicht sichtbar..?!
 
var Variablen: array [1..9999999] of TVariable;

Und du weißt nicht warum der Arbeitsspeicher voll wird?

inherited 12. Mai 2007 19:45

Re: Komponente entwickelt aber nicht sichtbar..?!
 
Wieso nimmst du keine dynamischen Arrays?

Dragon27 12. Mai 2007 19:59

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

Hawkeye219 12. Mai 2007 20:03

Re: Komponente entwickelt aber nicht sichtbar..?!
 
Hallo Andy,

wenn man einen constructor überschreibt, sollte man auch den geerbten constructor aufrufen.

Gruß Hawkeye

Dragon27 12. Mai 2007 20:05

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!

inherited 12. Mai 2007 20:06

Re: Komponente entwickelt aber nicht sichtbar..?!
 
MeinName Create;
Und rate mal was mein Name ist ;)
<- siehe da

mkinzler 12. Mai 2007 20:08

Re: Komponente entwickelt aber nicht sichtbar..?!
 
Zitat:

ja ich weiß, dass das nicht sauber ist....
Nicht sauber ist ne Untertreibung.
Zitat:

aber es muss ja an was anderem Liegen.... das nimmt sicherlich keine 4 GB in Anspruch.. oder?
Rechne doch mal aus wieviel Speicher belegt wird.
Übrigens kann ein Programm unter Windows nur 2 GB belegen

Dragon27 12. Mai 2007 21:13

Re: Komponente entwickelt aber nicht sichtbar..?!
 
Hallo,

also gut werde den Array noch dynamisch machen... Danke ;-)


Also das hier geht net:

Delphi-Quellcode:
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;
Danke für Eure Hilfe!

mkinzler 12. Mai 2007 21:18

Re: Komponente entwickelt aber nicht sichtbar..?!
 
Delphi-Quellcode:
inherited Create( AOwner);
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Seite 1 von 2  1 2      

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