Wątek przeniesiony 2015-02-13 21:02 z Delphi i Pascal przez olesio.

Nie umiem stworzyć prawidłowej aplikacji MDI.

0

Witam

Skorzystałem z jednego z gotowców dostępnych na portalu 4programmers.net, lecz kod ten nie działa mi (cały kod na końcu posta)

link do programu gotowca:
Otwieranie nowego dokumentu w zakładce

Po zrobieniu wszystkiego krok po kroku, nie ma tego za dużo, wywala mi następujące komunikat:

[Error] MAIN.PAS(97): Undeclared identifier: 'Memo'

Grzebiąc po innych forach odnalazłem, że wszystkie kody nie mają Memo, tylko Memo1
dodałem więc 1 po memo i wygenerowało mi taki błąd:

[Error] MAIN.PAS(97): Not enough actual parameters

Szperając dalej po forach już zagranicznych natrafiłem na opcje dodania takich linijek:

Child := ActiveMDIChild;

po dodaniu wygenerował się taki błąd:

[Error] MAIN.PAS(89): Incompatible types: 'TMDIChild' and 'TForm'

Później zaminiłem

Child := ActiveMDIChild;

na

Child := TMDIChild(ActiveMDIChild);

i znów wywaliło mi taki błąd

[Error] MAIN.PAS(98): Not enough actual parameters

Czy ktoś ma jakieś rozwiązanie gdzie popełniłem błąd aby to zadziałało? Byłbym wdzięczny za wszelką pomoc. Dodany kod pogrubiny, kod na którym wywala mi błąd kursywa.

unit MAIN;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
  StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
  ActnList, ToolWin, ImgList;

type
  TMainForm = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    FileNewItem: TMenuItem;
    FileOpenItem: TMenuItem;
    FileCloseItem: TMenuItem;
    Window1: TMenuItem;
    Help1: TMenuItem;
    N1: TMenuItem;
    FileExitItem: TMenuItem;
    WindowCascadeItem: TMenuItem;
    WindowTileItem: TMenuItem;
    WindowArrangeItem: TMenuItem;
    HelpAboutItem: TMenuItem;
    OpenDialog: TOpenDialog;
    FileSaveItem: TMenuItem;
    FileSaveAsItem: TMenuItem;
    Edit1: TMenuItem;
    CutItem: TMenuItem;
    CopyItem: TMenuItem;
    PasteItem: TMenuItem;
    WindowMinimizeItem: TMenuItem;
    StatusBar: TStatusBar;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    FileNew1: TAction;
    FileSave1: TAction;
    FileExit1: TAction;
    FileOpen1: TAction;
    FileSaveAs1: TAction;
    WindowCascade1: TWindowCascade;
    WindowTileHorizontal1: TWindowTileHorizontal;
    WindowArrangeAll1: TWindowArrange;
    WindowMinimizeAll1: TWindowMinimizeAll;
    HelpAbout1: TAction;
    FileClose1: TWindowClose;
    WindowTileVertical1: TWindowTileVertical;
    WindowTileItem2: TMenuItem;
    ToolBar2: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton9: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    ImageList1: TImageList;
    pctrlMain: TPageControl;
    procedure FileNew1Execute(Sender: TObject);
    procedure FileOpen1Execute(Sender: TObject);
    procedure HelpAbout1Execute(Sender: TObject);
    procedure FileExit1Execute(Sender: TObject);
  private
    { Private declarations }
    procedure CreateMDIChild(const Name: string);
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

uses CHILDWIN, about;

procedure TMainForm.CreateMDIChild(const Name: string);
var
  Child: TMDIChild;
  zakladka: TTabSheet;
begin




 ** Child := TMDIChild(ActiveMDIChild);**
 



 child := TMDIChild.Create(Application);
  zakladka := TTabSheet.Create(Self);
    zakladka.Caption := extractfilename(name);
  zakladka.PageControl := pctrlMain;
  child.Align := alClient;
  child.Visible := true;
  Child.Caption := Name;
  child.SetFocus;



//    if FileExists(Name) then Child.Memo1.Lines.LoadFromFile;//
  


child.Parent := zakladka;
  pctrlMain.ActivePage := zakladka;
end;
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
  CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;

procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
  if OpenDialog.Execute then
    CreateMDIChild(OpenDialog.FileName);
end;

procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
  AboutBox.ShowModal;
end;

procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
  Close;
end;

end.

dodanie znaczników <code class="delphi"> i <code class="none"> - @furious programming

0
wajet napisał(a):

Po zrobieniu wszystkiego krok po kroku, nie ma tego za dużo, wywala mi następujące komunikat:
[Error] MAIN.PAS(97): Undeclared identifier: 'Memo'

Grzebiąc po innych forach odnalazłem, że wszystkie kody nie mają Memo, tylko Memo1

WTF?! Po pierwsze, pytania o banalne podstawy zadajemy w dziale Newbie. Jeśli znowu zobacze, że ludzie uparcie to olewają, nie będę tam przenosił tylko wątek wyląduje w koszu i będziecie musieli pisać od nowa. Do skutku. Ileż można o to Was prosić żeby przestrzegać zasad tego forum?

Poza tym co Ty wypisujesz to ręce opadają. A gdyby ktoś nazwał komponent MojeMemo, to byś wywnioskował że ma być MojeMemo1? Poczytaj kurs z 4p i ogarnij podstawy, bo komunikat błędu "mówi' wszystko. Niby jak masz załadować plik do komponentu typu TMemo, jeśli go w ogóle nie masz na swojej formatce?

Fakt, że tutorial - o ile go można tak nazwać - z pod tego linku co podałeś, jest w zasadzie do niczego. Za bardzo lakonicznie go Adam napisał, ale to było dawno pewnie. Ale widocznie założył, że kaźdy powinien ogarniać podstawy i mając TBrain we własnej głowie, stwierdzi, że dodatkowo należy mieć na formatce albo położone TMemo albo sobie je stworzyć dynamicznie poprzez kod i tyle.

Polecam poczytać http://delphi.about.com/od/objectpascalide/l/aa042500a.htm i wiele innych do wygooglowania stron.

2

Przecież ten przykład, z którego skorzystał, poza drobną literówką (Memo zamiast Memo1), kompiluje się bez problemu. Załączam gotowca.

0

A widzisz jest zip z kodem. Tego na szybko nie dostrzegłem. Pomijając to, "problem" pytającego jest raczej banalny i należy najpierw zgłębić podstawy, żeby wiedzieć o co chodzi w komunikacie błędu, jaki otrzymuje od kompilatora. A dopiero później brać się za pisanie zaawansowanych rzeczy, w tym aplikacji MDI.

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