[Delphi - Problem z Out of Memory


(Stanny Tomasz) #1
var a,b:Int64;

    c:double;

    d:real;

begin

  a:=StrToInt64Def(Edit1.text,0);

  b:=StrToInt64Def(edit2.text,0);

  c:=1.05*a;

  d:=c-b;

  begin;

  if (c>a) then

  begin;

  label1.caption:=FloatToStr(c);

  end;

  if (b
  begin;

  label1.Caption:='Za mało o: ';

  label7.Caption:=FloatToStr(d);

  end;

  end;

  end;

To główna struktura programu gdzie mam błąd Out of Memory. Co w tym przypadku może być winowajcą ?


([alex]) #2

Na pewno nie w tym kawałku problem.


(Stanny Tomasz) #3
unit Unit1;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;


type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Button1: TButton;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    procedure Button1Click(Sender: TObject);


    procedure FormKeyPress(Sender: TObject; var Key: Char);

  private

    { Private declarations }

  public

    { Public declarations }

  end;


var

  Form1: TForm1;

  key:char;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);

var a,b:Int64;

    c,d:double;

begin

  a:=StrToInt64Def(Edit1.text,0);

  b:=StrToInt64Def(edit2.text,0);

  c:=1.05*a;

  d:=c-b;

  begin;

  if (c>a) then

  label1.caption:=FloatToStr(c);

  if (b
  begin

  label1.Caption:='Za mało o: ';

  label7.Caption:=FloatToStr(d);

  end;

  end;

  end;



procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);


begin

if not (key in ['0'..'9',#8])then key:=#0;


end;

end.

Cały program


(Ryan) #4

Uruchom w debuggerze i po wysypaniu się zobaczyć w której linii. Forum to dobre miejsce do zadawania pytań, ale w dalszej perspektywie umiejętności pracy z debuggerem nie zastąpi. :wink:


(Stanny Tomasz) #5

a mógłbyś mi powiedzieć jak tego użyć ?


(Ryan) #6

Nie używałem Delphi ponad 10 lat, więc nie pamiętam niezbędnych kroków. Zerknij do menu Run - powinno być tam uruchamianie z debuggerem (Debug and run czy coś). Jak nie ma, to pewnie aktywuje się to gdzieś w opcjach (jakieś menu Project / Options pewnie i dalej opcje kompilatora). W czasie debugowania aplikacji, w razie błędu takiego jak OOM, aplikacja powinna zostać wstrzymana a Ty wrócisz do IDE. Tam najprawdopodobniej będziesz miał w edytorze kodu podświetloną linię która sprawiła problem (lub sąsiadującą z nią linię - zależy).

Generalnie: kombinuj, ucz się narzędzia. Inaczej programujesz metodą rzucania lotkami w tarczę przy zamkniętych oczach. Czasami coś się uda trafić. :wink:


([alex]) #7

Może to jakiś bug, wywal zbędny begin (ten ze średnikiem) wraz z odpowiednim end'em.

Jak nie zadziała, to napisz warunek w FormKeyPress po ludzku.

Jeżeli nadał nie to to zobacz co masz w pliku dfm, możliwe że jest to coś z innej wersji delphi - nie pasuje.


(Stanny Tomasz) #8

który begin?


([alex]) #9

Kliknij prawym klawiszem na formę, wybierz View As Text , zaznacz wszystko i wklej na forum.

Sądzę że masz podłączoną którąś z tych dwóch metod w nieodpowiednim miejscu.


(Stanny Tomasz) #10

nic nie pomogło :confused:

-- Dodane 16.10.2009 (Pt) 7:14 --

Chciałbym odświeżyć temat, bo jak narazie nadal mam ten sam problem.