Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

DELPHI błąd przy przejsciu miedzy formami

gienek861 06 Cze 2010 11:00 1359 4
  • #1 06 Cze 2010 11:00
    gienek861
    Poziom 8  

    W programie który piszę pojawil sie pewien problem. Dotyczy przejscie z Form4 do Form5, ktore wygląda tak
    Kod:
    if RadioGroup1.ItemIndex=0 then
    begin
    s:=s+10 ;
    Form5.show ;
    end

    Ale chcialbym dodac opcje Form4.hide. Jednak pojawia sie bląd. Gdy odpalam program niby okienko Form4 ladnie znika, ale gdy zamykam wszystko pojawia się jakies Okienko CPU z podzialem na 4 czesci, mnostwo liczb, to zdecydowanie jakis blad bo nawet nie powraca do wyjsciowego wygladu (object inspectra itp). U mnie pojawia sie strzalka przy: ntdll.KiFastSystemCallRet: 77BC9A94 ret. O co kaman?
    Kiedy probuje zrobic przejscie Form5.showmodal (aby wczesniejsze okienko bylo "nieaktywne") pojawia sie komunikat "'Label3' is not a valid integer value". Label3 w Form5 przejmuje u mnie wartosc zmiennej s z Form4, by nastepnie odczytana z tego labela wartosc wykorsytac dalej w obliczeniach Form5. Jak sobie poradzic z tym blędem? Jakies sugestie?

    0 4
  • #2 06 Cze 2010 12:34
    Defozo
    Poziom 17  

    gienek861 napisał:
    Ale chcialbym dodac opcje Form4.hide. Jednak pojawia sie bląd. Gdy odpalam program niby okienko Form4 ladnie znika, ale gdy zamykam wszystko pojawia się jakies Okienko CPU z podzialem na 4 czesci, mnostwo liczb, to zdecydowanie jakis blad bo nawet nie powraca do wyjsciowego wygladu (object inspectra itp). U mnie pojawia sie strzalka przy: ntdll.KiFastSystemCallRet: 77BC9A94 ret. O co kaman?

    Twój opis niewiele mi mówi, spróbuj odpalić program bez debuggera delphi i zobaczyć jaki błąd wyskoczy.
    Najlepiej wklej więcej kodu.
    I czy okienko też się pojawia gdy nie zastosujesz Form4.Hide?

    gienek861 napisał:
    pojawia sie komunikat "'Label3' is not a valid integer value". Label3 w Form5 przejmuje u mnie wartosc zmiennej s z Form4, by nastepnie odczytana z tego labela wartosc wykorsytac dalej w obliczeniach Form5.

    Label jest stringiem, a ty chcesz mu przypisać integer.
    Pokaż jak to robisz, powinieneś to zrobić tak:
    Code:
    Label3.Caption := IntToStr(s);
    
    wynik := StrToInt(Label3.Caption)+229523;

    Pamiętaj o konwersji.
    Sprawdź czy Label3 na pewno zawiera tylko liczbę.

    Pozdrawiam,
    Defozo

    0
  • #3 06 Cze 2010 13:00
    gienek861
    Poziom 8  

    Kod z Form4:

    Code:
    procedure TForm4.Button1Click(Sender: TObject);
    
    begin
      begin
    s:=0;
    case RadioGroup1.ItemIndex of
    0: begin
    s:=s+10 ;
      Form5.show  ;
      [color=red]Form4.hide;[/color]
      end   ;
    1: begin
    s:=s+20 ;
      Form5.show  ;
     [color=red] Form4.hide;[/color]
      end      ;
    2: begin
    s:=s+30  ;
      end;           
    3: begin
    s:=s+40;   
      end;
    end;

    end;
    form5.Label3.caption:=inttostr(s);
    end;


    Kod z Form5:
    Code:
     begin
    
     s1:=Form4.s;
    if RadioGroup1.ItemIndex=0 then
    s1:=s1+10
    else if RadioGroup1.ItemIndex=1 then
    s1:=s1+20
    else if RadioGroup1.ItemIndex=2 then
    s1:=s1+30
    else if RadioGroup1.ItemIndex=3 then
    s1:=s1+40;     
    end;
    end;


    procedure TForm5.Button2Click(Sender: TObject);
    begin
    label4.caption:=inttostr(s1);
    end;

    procedure TForm5.Button3Click(Sender: TObject);
    begin
    form4.show;
    [color=red]Form5.hide;[/color]
    end;

    procedure TForm5.Button4Click(Sender: TObject);
    begin
    label3.caption:=inttostr(Form4.s);
    end;

    end.


    przy takim ukladzie dziala, tylko nie "blokuje" Form4 przy otwartym Form5. Label3 definiowanejestprawidlowo,w sumie to tylko jest potrzebne na tachwile dla sprawdzenia czy program dziala prawidlowo, bo ogolnie dziala juz polecenie wykorzystujace w Form5 costakiego s1: Form4.s

    Gdy dostawie fragmenty wpisane wyzej na czerwono niby wszystko dziala, ale na koniec pyta czy debudowac i wywala okienko z CPU itd. Gdy zameiniam show na showmodalpojawia sie okieno z komunikatem "Canot make a visible window modal" i musze debugowac sesje. Jak wylaczyc debuggera?

    0
  • #4 06 Cze 2010 17:32
    arnoldziq
    Moderator Programowanie

    Nie potrzebnie próbujesz zamykać formę nadrzędną.
    Poszukaj informacji o ShowModal.

    0
  • #5 06 Cze 2010 20:42
    lanky
    Poziom 17  

    A po co Ci tyle form ? Każda forma to jak by następny program. Dla czego tego nie możesz zrobić np. na zakładkach na jednej formie?
    W Delphi w zakładce Win32 masz komponent PageControl to jest chyba 2 komponent od lewej, włóż go na formę i w okienku Object TreeView nakieruj na nazwę PageControl1 naciśnij PPM i dodaj New Page (tyle ile chcesz) i traktuj je sobie jak formy. Dużo ułatwi ci to życie i zmniejszy rozmiar programu.

    0