Tform1 is missing or incorrect ! nie działa żaden program

0

Witam,
mam problem! Czytam kompedium (Kompendium) i gdy skopiuje byle jaki kod, co kielwiek zrobie w delphi to wyskakuje mi error "Error i module Unit1: Tform1 is missing or incorrect" Czasami brakuje liniki " type TForm1 = class(TForm)", gdy sam ją dapiszę to wyskakują inne error np. "expected end but begin found" . Żeby było jasne to wkleję przykładowy kod przy krórem wyskakuje error(chociaż dzieje się tak na dosłowie każdym)

 unit MainFrm;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
 
type
  TMainForm = class(TForm)
    btnGetIPName: TButton;
    procedure btnGetIPNameClick(Sender: TObject);
  end;
 
var
  MainForm: TMainForm;
 
implementation
 
{$R *.DFM}
 
uses WinSock; // <-- wazny modul umozliwiajacy pobieranie adresu IP
 
procedure GetIPAndName(var IPAddress : PChar; var ACompName : PCHar);
var
  Host : PHostEnt;
  CompName : array[0..MAX_PATH] of char; // Nazwa zalogowanego uzytkownika
  IP : PChar; // adres IP komputera
begin
  //Pobieramy nazwę komputera i przypisujemy ja zmiennej "CompName"
  GetHostName(@CompName, MAX_PATH);
  Host := GetHostByName(@CompName); // uzyskanie nazway uzytkownika
 //przypisanie zmiennej "ACompName" nazwy uzytkownika
  ACompName := Host^.h_name; 
 
  //Pobieramy jego adres IP  ( urzyte tu zostalo rzutowanie )
  IP := iNet_ntoa(PInAddr(Host^.h_addr_list^)^);
 
  IPAddress := IP; // przypisanie zmiennej "IPAddress" nazwy IP
end;
 
procedure TMainForm.btnGetIPNameClick(Sender: TObject);
var
  IP : PChar;
  CName : PCHar;
  TF : TextFile; // plik tekstowy
begin
{
  Wykonaj procedure i przypisz jej parametry dwom zmiennym: IP oraz CName
}
  GetIPandName(IP, CName);
  AssignFile(TF, 'C:IP.txt'); // skojarz zmienna z nazwa tworzonego pliku
  try
    Rewrite(TF); // zapisz plik na dysku
    Writeln(TF, 'Adres IP: ' + IP); // zapisz do pliku linie
    Writeln(TF, 'Nazwa użytkownika: ' + CName);
  finally
    CloseFile(TF); // zakoncz zapisywanie do pliku
  end;
end;
 
var
  VER : WORD;
  Data : TWSAData;
 
initialization
begin
 //Ładujemy bibliotekę Winsock
  VER := MAKEWORD(1, 0);
  WSAStartup(VER, Data);
end;
 
finalization
  WSACleanup; // zwolnij biblioteke Winsock
 
end.
0

bo przy programowaniu trzeba przede wszystkim MYŚLEĆ

a co do tego kodu to błąd nie wyskakuje w tym unicie tylko w module głównym (dpr) aplikacji

0

Czyli co mam robić oprócz new>application i wklejeniu kodu(oczywiście, żeby działało)?

P.S. Dziękuję za odpowiedź :)

Pozdrawiam
Michał

0

Nie wklejać całego kodu, tylko jak jest kod np.OnClick dla Button1, to tworzysz Button1, klikasz na niego dwa razy i tam wklejasz kod, itp. dla innych.

0

@up nie rozumiem za bardzo :)

0

Zacznij czytać Kompendium od początku, nie od końca. Seks też zaczynasz od wytrysku?

0

Zacząłem od początku! Teraz jestem w 3 rozdziale :) Powiecie mi jasno jak do idioty co robię źle? Zamieszczam Screena.

0

Kod Ci się sklonował?
Dwa razy moduły, dwa razy TButton...

Spakuj i wrzuć jako załącznik.

0

Przeczytaj po kolei i na spokojnie kurs. Za dużo lub źle wklejasz kod, bo nie rozumiesz podstaw. Poniżej przykład prawie gołego kodu z umieszczonym na formatce Buttonem. Widzisz różnice między "swoim" kodem, a Tym? Jest tutaj deklaracja klasy TForm1 i komponentów na niej, a tego u Ciebie brakuje. Czytając na spokojnie od początku kompendium na pewno byś wiedział co i jak. Wklejanie "na pałę" nic nie da, trzeba też po przeczytaniu zrozumieć wskazówki i przede wszystkim myśleć. A poza tym edytor kodu sam uzupełnia odpowiednie wpisy jeżeli wizualnie modyfikojesz formatkę i dodajesz kod do jej zdarzen czy zdarzeń jej komponentów (zdarzenia są w zakładce Events Inskeptora Obiektów).

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Ucz się najpierw podstaw!');
end;

end.
0

@up Dzięki za konkretną odpowiedź :) Czyli musi być

type
  TForm1 = class(TForm)
    Button1: TButton; 

zawsze? i zmiennia Form1: TForm1; ?

Tylko ciągle nie czaje czemu ten kod mi nie działa


uses StrUtils;
  procedure TForm1.Button1Click(Sender: TObject);
var
  S1 : AnsiString;
begin
  S1 := 'Borland Delphi 7 Studio';
  ShowMessage(
    LeftBStr(S1, 8)
  );
{ zwróci napis "Borland" }
end;
(**********************************************)
 
uses StrUtils;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  S1 : AnsiString;
begin
  S1 := 'Borland Delphi 7 Studio';
  ShowMessage(
    RightBStr(S1, 6)
  );
{ zwróci napis "Studio" }
end;
 
(************************************************)
 
uses StrUtils;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  S1 : AnsiString;
begin
  S1 := 'Borland Delphi 7 Studio';
  ShowMessage(
    MidBStr(S1, 8, 7)
  );
{ zwróci napis "Delphi" }
end; 

Robię tak:

Tworzę Tbutton kilkam na niego 2x włącza się edytor kodu, wywalam z niego liniki: "procedure TForm1.Button1Click(Sender: TObject);" i "begin oraz end", wklejam ten kod:

 procedure TForm1.Button1Click(Sender: TObject);
var
  S1 : AnsiString;
begin
  S1 := 'Borland Delphi 7 Studio';
  ShowMessage(
    LeftBStr(S1, 8)
  );
{ zwróci napis "Borland" }
end;
i delphi wywala mi błąd (na screenie w załączniku)
0

Dalej wklejasz "na pałę". Najpierw poczytaj podstawy, bo nie ma sensu w każdej odpowiedzi tłumaczyć jakiś podstaw, które poznał byś po lekturze całego kursu. Jeżeli dodajesz jakieś moduły do sekcji uses po słowie kluczowym implementation to możesz to zrobić tylko tam, a nie później trzy razy jak u Ciebie. Poza tym wklejasz trzy razy te samą metodę. Umieszczasz przycisk na pustej formatce - klikasz na niego dwa razy. I wtedy edytor kodu przenosi Ciebie do domyślnego zdarzenia dla przycisku czyli OnClick, które jak się nietrudno domyśleć zaistnieja przy pojedynczym kliknięciu na przycisk (może mieć jeszcze miejsce w innych sytuacjach, ale to sam dojdziesz kiedy jak przeczytasz całe kompendium). Wpisujesz taki kod pomiędzy nazwę zdarzenia po słowie procedure a ostatni end;

var
  S1 : AnsiString;
begin
  S1 := 'Borland Delphi 7 Studio';
  ShowMessage(MidBStr(S1, 8, 7));

Ale zanim zadasz kolejne pytania - przeczytaj całe kompendium i mając podstawową wiedzę, kombinuj dalej sam.

0

Robię tak:

Tworzę Tbutton kilkam na niego 2x włącza się edytor kodu, wywalam z niego liniki: "procedure TForm1.Button1Click(Sender: TObject);" i "begin oraz end", wklejam ten kod:

 procedure TForm1.Button1Click(Sender: TObject);
var
  S1 : AnsiString;
begin
  S1 := 'Borland Delphi 7 Studio';
  ShowMessage(
    LeftBStr(S1, 8)
  );
{ zwróci napis "Borland" }
end;
i delphi wywala mi błąd (na screenie w załączniku)

EDIT: DOBRA JESTEŚ WIELKI!!!!! JUŻ ZACZAIŁEM :) :) :) Nie wiedziałem, że trzeba do uses dodać StrUtils

0

Ręcę opadają. Wiem, początkujący, też Michał, ale Michały to raczej wiesz kumate chłopaki, a Ty najpierw dodajesz trzy razy StrUtils do uses, a później kiedy chcesz korzystać z funkcji LeftBStr, która jest w ów module to już pewnie do uses tego modułu nie dodałeś. Poczytaj leniuszku podstawy!!! I wetdy wszystko będzie jasne, przy okazji nauczysz się rozumieć błędy kompilatora i na nie reagować. I przez reagowanie mam na myśli samodzielne ich poprawienie, a nie pisanie co chwilę posta z pytaniem.

0

JAK 3 RAZY? Zrobiłem nową aplikacje, stworzyłem nową aplikację, przycisk TButton, kliknąłem na niego 2 razy, usunąłem

 procedure TForm1.Button1Click(Sender: TObject);
begin

end;

i wkleiłem procedure TForm1.Button1Click(Sender: TObject)code> i wkleiłem ` procedure TForm1.Button1Click(Sender: TObject);
var
S1 : AnsiString;
begin
S1 := 'Borland Delphi 7 Studio';
ShowMessage(
LeftBStr(S1, 8)
);
{ zwróci napis "Borland" }
end;

  i wyskakuje taki błąd .. :(
EDIT: DOBRA JESTEŚ WIELKI!!!!! JUŻ ZACZAIŁEM     Nie wiedziałem, że trzeba do uses dodać StrUtils
0

No teraz nie dodałeś StrUtils do sekcji uses pewnie, bo inaczej błędu by nie było. Jakbyś przeczytał najpierw kompendium albo pogooglował trochę samodzielnie to byś znalazł Uses i po przeczytaniu wiedział byś już wszystko. Według mnie dalsze tłumaczenie Tobie nie ma sensu, bo wszystko z takich podstaw już dawno zostało wyjaśnione na wielu stronach w sieci, zarówno po polsku jak i po angielsku. Dalej już radź sobie sam. Przeczytaj najpierw komendium żeby poznać podstawy języka, a dopiero później bierz się za jakieś przeklejanie kodu i samodzielne pisanie.

0

Ja mam też problem z "declaration of class is missing or incorrect" nawet przy samym kodzie end.Zaprawdę powiadam Wam, że nie mam pojęcia co z tym zrobić, a przecież sam powyższy kod jest w 100% kompletny. To jak, pomożecie?

0

O ile to nie prowokacja i ktoś sobie nie robi jaj to mogę jedynie polecić wklejenie całego kodu unita w którym jest błąd, bo najprawdopodobniej została usunięta deklaracja klasy lub jest ona nieprawidłowa, co zresztą wyjaśnia komunikat tego błędu. Jeżeli kod jest przydługi to polecam go wkleić na jakąś stronę typu: http://pastebin.pl i podać tutaj link do kodu. Wtedy może coś poradzimy. Bo bez fragmentu kodu mogę jedynie polecić samodzielne opanowanie kompendium na 4p i elementatnych podstaw języka Delphi.

0

Tak, end jest całym kodem, ale na początku "Kompendium" jest napisane że jest to kompletny kod programu.

Najprostszy program
Rozłożymy zawartość pliku głównego na części, dzięki czemu będziesz miał możliwość dowiedzenia się, jakie funkcje pełnione są przez konkretne elementy kodu źródłowego.

Kod źródłowy najprostszego do napisania programu przedstawiony jest poniżej:

end.

To nie żart! Najprostszy program składa się właśnie z instrukcji end, z kropką na końcu. Możesz to sprawdzić — naciśnij klawisz F9, uruchamiając w ten sposób program. Oczywiście żadne polecenia oprócz end nie są wpisane, dlatego program zaraz po uruchomieniu zostanie zamknięty.

Tylko że w moim przypadku program nie "zostaje zamknięty" tylko wywala wcześniej wspomniany błąd. Skutecznie uniemożliwia mi to nawet rozpoczęcie nauki Delphi, dlatego zwracam się do Was o pomoc.

0
end.

Jest jak najbardziej poprawnym kodem, lecz ty pewnie tworzysz aplikację okienkową.
Utwórz aplikację konsolową i będzie OK (File->New->Other->Console Application).

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