AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Für diesen Befehl ist nicht genügend Speicher vorhanden.
Thema durchsuchen
Ansicht
Themen-Optionen

Für diesen Befehl ist nicht genügend Speicher vorhanden.

Ein Thema von sventeq · begonnen am 31. Jan 2011 · letzter Beitrag vom 31. Jan 2011
Antwort Antwort
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#1

AW: Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 11:18
GetLastError muss nicht immer heißen, dass der Fehler innerhalb deiner procedure aufgetreten ist.
Er kann auch von woanders kommen. versuche z.b. vor dem Aufruf des Buttons ein SetLastError unterzubringen.
Wenn die Meldung immer noch auftritt deutet das darauf hin, dass es ein VCL-Fehler ist, oder dass es innerhalb er VCL ausgewertet wird. Jedenfalls brauchst du dich DANN nicht mehr darum kümmern. Die Anwendung funktioniert deswegen trotzdem.
  Mit Zitat antworten Zitat
sventeq

Registriert seit: 15. Jul 2007
76 Beiträge
 
#2

AW: Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 11:25
GetLastError muss nicht immer heißen, dass der Fehler innerhalb deiner procedure aufgetreten ist.
Er kann auch von woanders kommen. versuche z.b. vor dem Aufruf des Buttons ein SetLastError unterzubringen.
Wenn die Meldung immer noch auftritt deutet das darauf hin, dass es ein VCL-Fehler ist, oder dass es innerhalb er VCL ausgewertet wird. Jedenfalls brauchst du dich DANN nicht mehr darum kümmern. Die Anwendung funktioniert deswegen trotzdem.
Ok, versuche ich jetzt mal. Aber wie bekomme ich die Fehlermeldung weg? Obwohl alles funktioniert, wäre es ja schon störend, wenn die Meldung ständig kommen würde.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#3

AW: Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 12:14
Verstehe ich nicht. Du gibst eine Message aus und willst die dann weghaben? BTW:
Zitat:
Delphi-Quellcode:
silbenDLG:=TsilbenDLG.Create(self);
          if silbenDLG.showModal=mrOk then
          begin
            silbenDLG.free;
          end;
Du gibst den Dialog nur frei, wenn er mrOK zurückgibt, erzeugst ihn aber immer neu?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 13:03
Das ist ja mal ein tolles Beispiel, wie man nicht programmieren sollte.
Die Methode ist riesig und hat jede Menge Wiederholungen.
Ausserdem steckt noch auskommentierter Code als Störfeuer drin.

Ok, genug gelästert, hier der Weg zur Besserung.
Ich würde hier ein Bottom-Up-Design vorschlagen; also unten mit den kleinen Dingen beginnen und verbessern.

Ich greife mal diese Zeile raus, die vier Mal vorkommt:
Delphi-Quellcode:
if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
begin
Daraus lässt sich eine Funktion erstellen:
Delphi-Quellcode:
function CharIstSatzzeichen(c:char):Boolean;
begin
  result := (c='.') or (c=',') or (c='!') or (c='?') or (c=':') or (c=';');
end;
Mit dem In-Operator lässt sich das noch etwas kompakter schreiben:
Delphi-Quellcode:
function CharIstSatzzeichen(c:AnsiChar):Boolean;
begin
  result := c in ['.',',','!','?',':',';'];
end;
Im nächsten Schritt wird diese Funktion dann verwendet.

Aber damit noch nicht genug. Wir betrachten folgenden Code:
Delphi-Quellcode:
prgrammdb.DikNeuSatzEintrag.Last;
prgrammdb.DikNeuSatzEintrag.Insert;
prgrammdb.DikNeuSatzEintragDiktatID.Value:=prgrammdb.dikNeuEintragID.Value;
prgrammdb.DikNeuSatzEintragWort.Value:=prgrammdb.silbenSilbe.Value;
prgrammdb.DikNeuSatzEintragSatzID.Value:=j;
prgrammdb.DikNeuSatzEintragWortID.Value:=seObjekt1.wortID;
prgrammdb.DikNeuSatzEintragSilbenID.Value:=x;
prgrammdb.DikNeuSatzEintrag.Post;
Dieser Code muss "verschwinden", d.h. er muss in eine Methode wandern:
Delphi-Quellcode:
// Datensatz an Diktionary anhängen
procedure TdiktatNeuDLG.AddDikRecord(DikatID,Word,SatzID,WordID,SilbenID: ???);
Den Datentyp für die Parameter habe ich weggelassen; die kennst du selbst am Besten.
Eigentlich ist der Code noch an der falschen Stelle.
Er gehört zum Datenmodul (oder Formular) Tprgrammdb.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Daniela.S
Daniela.S

Registriert seit: 1. Mär 2008
Ort: Niederösterreich
226 Beiträge
 
Delphi XE4 Enterprise
 
#5

AW: Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 14:20
ja wenn wir beim Programmstyle schon sind sollte man noch einiges erwähnen...

Also ehrlich gesagt tu ich mir beim Lesen des Codes sehr schwer.
Bisserl umständlich? Und warum 2x hintereinander ein Leerzeichen löschen?
Delphi-Quellcode:
          Text1:=copy(Memo1.Text, 1, length(Memo1.Text));

          szeichen:=copy(Text1, length(Text1), length(Text1));
          if szeichen=' then delete(Text1, length(Text1), length(Text1));
          szeichen:=copy(Text1, length(Text1), length(Text1));
          if szeichen=' then delete(Text1, length(Text1), length(Text1));
warum nicht so?
  Text1 := Trim( Memo1.Text);
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 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