Okienka MDI... w nietypowy sposób :D

0

Witam :)
Napisałem bardzo banalny program graficzny, kompiluje się, uruchamia. Jak wybiorę plik do otworzenia to mi się pojawia błąd :-[ ;-( [!!!] [!!!] [!!!] [glowa]

Unit1.pas:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, ColorGrd;

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    StatusBar1: TStatusBar;
    Panel3: TPanel;
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    ColorGrid1: TColorGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ColorGrid1Change(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  Rysowanie: Boolean;
implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
Rysowanie := True;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Rysowanie := False;
end;

procedure TForm2.ColorGrid1Change(Sender: TObject);
begin
Image1.Canvas.Pen.Color := ColorGrid1.ForegroundColor;
end;

procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Rysowanie = True then Image1.Canvas.LineTo(X,Y) else 
end;

end.

Unit1.pas:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ExtCtrls, ExtDlgs, Unit2;

type
  TForm1 = class(TForm)
    p1: TPanel;
    p2: TPanel;
    p3: TPanel;
    p4: TPanel;
    p5: TPanel;
    Button1: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Licznik: Integer;
Formy: array[0..50] of TForm2;
begin
if not (Licznik = 50) then Inc(Licznik) else Dec(Licznik);
if OpenPictureDialog1.Execute then begin
Application.CreateForm(TForm2,Formy[Licznik]);
Formy[Licznik].Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
end;

end.

Project1.dpr:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;

  end.

Proszę o pomoc ;)
Załącznik do kodu źródłowego + pliku EXE :-) : http://rapidshare.com/files/163427253/Okienka_MDI.rar.html

0

przemyśl ten kawałek kodu:

procedure TForm1.Button1Click(Sender: TObject);
var
Licznik: Integer;
Formy: array[0..50] of TForm2;
begin
if not (Licznik = 50) then Inc(Licznik) else Dec(Licznik);

i odpowiedz na poniższe pytania:

  • czym różni się zmienna globalną od lokalnej?
  • jaką wartość ma niezainicjowana zmienna lokalna?
  • jaka będzie różnica, jeśli zadeklarowane w powyższym kodzie zmienne przesuniesz linijkę do góry, jaka, kiedy zmienna licznik będzie inicjowana zerem, a jaka, kiedy zrobisz jedno i drugie?
  • jaki jest cel przy 50-tej formatce (jak już ją w końcu otworzysz) zmniejszać licznik do 49, potem zwiększać do 50, zmniejszać do 49, zwiększać do 50 itp.?
  • czy formatowanie kodu to mit?
  • czym różni się if zmienna = true then... od if zmienna then...?
  • czy uważasz, że to forum jasnowidzów, czarodziei, wróżek i innych nekromantów, że mamy zgadywać, jakie są objawy zjawiska "mam błąd w programie"? a jeśli nawet, to nie sądzisz, że łatwiej się zgaduje z informacją "mam błąd AV czy tam Access Violation pamięć pod adresem siakimś nie może być "write", występuje w okolicach linijki..."?
  • czy wiesz, co to debuger, breakpoint, run to cursor, evaluate/modify, watch?
0
  • globalna - ma wszystko do niej dostęp , lokalna - tylko to w czym jest zadeklarowana
  • nie wiem
  • też nie wiem
  • nie wiem ;(
  • nie
  • niczym :P
  • sądzę że łatwiej się zgaduje z informacją "mam błąd AV czy tam Access Violation pamięć pod adresem siakimś nie może być "write", występuje w okolicach linijki...""
  • nie/tak/nie/nie/nie
0

to się dowiedz, naucz, przeczytaj, zastosuj, użyj. a co do pierwszego pytania, to kompletnie nie o to chodziło.
w sumie masz rację tylko w drugim pytaniu - ty nie wiesz, ja nie wiem, nikt nie wie jaką wartość ma niezainicjowana zmienna lokalna!

podpowiedź: w Delphi zmienne lokalne trzeba inicjować, a Ty używasz niezainicjowanej. co się stanie, jeśli będzie przypadkiem mieć wartość -5613, 234, 52, -1, albo dowolną inną wychodzącą poza indeksy twojej (też lokalnej) tablicy?

pytania z najniższej półki:

  • co to jest zmienna lokalna?
  • jaki jest czas życia zmiennej lokalnej?

do wygrania kolejna porcja pytań i możliwość skorzystania z podpowiedzi publiczności.

0

lokalna to zmienna do której ma dostęp tylko to w czym jest zadeklarowana
do wyłączenia programu ??

0

czas życia zmiennej lokalnej kończy się z momentem wyjścia z funkcji/metody, w której jest zadeklarowana. kolejne wywołania takiej metody nie będą magicznie przywracać wartości zadeklarowanych w niej zmiennych. i nie zgaduj, tylko poczytaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1