Delphi - kompilowanie


(Kamilmlody5) #1

Witam wszystkich

Mam problem z kompilacją. Opiszę:

  1. W programie dodałem kilka form, buttonów, itd.

  2. Zapisywałem i uruchamiałem(kompilowałem) program. Wszystko było ok.

  3. Wychodzę z programu i robię sobie odpoczynek.

  4. Wchodzę w delphi otwieram projekt i chcę go uruchomić(klikam na run)

  5. Niestety patrzę a tu nic. Niby wszystko jest tak jak należy. Kod programu jest, żaden błąd nie wyskakuje. Po prostu klikam a tu program się uruchamia i od razu znika, jakby nic w nim nie było. Nie wyskakuje żaden błąd.

Może mi ktoś pomóc?

Z góry dziękuję


([alex]) #2

Czy przed odpoczynkiem również uruchomiałeś czy tylko kompilowałeś?

Może wyskakiwać błąd ale odłączyłeś jego wyłapywanie.

Sprawdź menu: tools, debuger options,

zakładka "Os exceptions" czy zahaczone "Handled by debuger" oraz

zakładka "Language Exceptions" czy zahaczone "Stop on Delphi exceptions".

Czy możliwe że nie zapisałeś projektu?

Sprawdź menu: project, options, zakładka "Forms" czy jest coś na liście "Auto-create forms".


(Kamilmlody5) #3

Problem rozwiązałem sam. Dziwne.

O to co zrobiłem.

Stworzyłem nowy projekt(zrobiłem głupotki w okienku)

Zapisałem projekt

Zobaczyłem co mam napiasne w pliku project1.dpr

Zobaczyłem jak było w moim projekcie.

Była różnica. Podopisywałem formy, itd. i chodzi. Ale teraz moje pytanie. Dlaczego to się usunęło w moim projekcie ?(dokładnie to co dopisałem:

uses

Forms,

Unit1 in 'Unit1.pas' {Form1};

Application.CreateForm(TForm1, Form1); itd.)


([alex]) #4

Nie został zapisany projekt: Wyłączyłeś Delphi i odmówiłeś zapisania projektu kiedy zapytał o to lub Delphi zostało wyłączone "na hama" przez restart lub logoff.

Nie musiałeś zakładać nowy projekt, wystarczyło dodać do projektu Unit1.pas oraz przenieść Form1 do "Auto-create forms", tak jak pisałem w poprzednim poście:

Czy możliwe że nie zapisałeś projektu?

(Kamilmlody5) #5

Jeżeli chodzi o tą sprawę, jestem na 100% pewien, że zapisałem projekt. Dobra pomińmy tą sprawę. Mam inny problem. Chodzi o zapisanie konfiguracji do pliku ini. Wszystko jest dobrze, skrypt chodzi. Ale przy kompilacji, wyskakują błędy. Błąd to"cannot find implementation of method BitBtn3Click". A przy kompilacji:

',' EXPECT BUT '.' FOUND

DECLARATION EXPECTED BUT END OF FILE FOUND

UNSATIFIED FORWARD OR EXTRENAL DECLARATION: 'TFOM1.BITBTN3CLICK'

no i"could not compile used unit 'unit1.pas'

Może mi ktoś to wyjaśnić, co robie źle w kodzie? Jak potrzebny kod to niech ktoś napisze, żebym go dał.


([alex]) #6

Pewnie usunąłeś ręcznie metodę która się stworzyła automatycznie, w takim wypadku należy również ręcznie usunąć ją z deklaracji klasy.


(Kamilmlody5) #7

Sory, ale czyli?

Alex jestem początkujący. Może dam kod:). Aha i jeszcze chce dodać 1 button, ale nie mogę. Stworzyć to go stworzę, ale gdy chcę go otworzyć i tam wpisać kod, niestety wyskakuje mi jakiś błąd. Prosze oto kod( nie jest on duży, to dopiero początek programu)

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

INI : TINIFile;

implementation

{$R *.dfm}

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

INI := TINIFile.Create('config.ini');

try

INI.WriteString('glowne', 'ip', IP.Text);

INI.WriteString('glowne', 'port', PORT.Text);

INI.WriteString('glowne', 'haslo', LabeledEdit1.Text);

finally

INI.Free;

end;

end.

Aha i jeszcze dodałem do usues INIFILES:)


([alex]) #8

procedure BitBtn3Click(Sender: TObject); - wykasuj ten wiersz.

Z tym że masz więcej błędów, w procedurze BitBtn2Click, zastosuj wcięcia a natychmiast zobaczysz:

procedure TForm1.BitBtn2Click(Sender: TObject);begin:= TINIFile.Create('config.ini');  try.WriteString('glowne', 'ip', IP.Text);    INI.WriteString('glowne', 'port', PORT.Text);    INI.WriteString('glowne', 'haslo', LabeledEdit1.Text);  finally.Free;  end;// brakuje end dla procedury    [/code]To właśnie jest przyczyną tego że nie da się automatycznie dodać kodu dla przycisku, IDE nie może zlokalizować gdzie ma dodać kod (nie wie gdzie kończy się ostatnia procedura).



inifile potrzebujesz tylko w części implementacyjnej, czyli tu:
[code]implementation

uses IniFile;

{$R *.dfm}
Zmienną INI:TIniFile nie ma sensu robić jako globalną, wystarczy:
procedure TForm1.BitBtn2Click(Sender: TObject);
var INI:TIniFile;
begin[/code]

(Kamilmlody5) #9

Ok, wielkie dzięki mam jeszcze kilka pytań. Widać, że alex zna się na rzeczy, więc

Jak zrobić takie coś, że do powyższego skryptu na zapis danych z pól edit, dodać taką funkcję, że po kliknięciu na przycisk otwiera okienko"Zapisz jako" i będzie można wybrać gdzie ma plik zapisać.

Jak zrobić aktywny tekst. Że po kliknięciu na przycisk w postaci zwykłego tekstu za pomocą Static text, wyświetlało jakiś tekst, w oknie programu w jakimś miejscu ? jeszcze da rade zrobić coś takiego, że w okienku programu można było w jakieś Frame dać batch?. Po prostu chcę, żeby w okienku programu pokazał się plik batch(w tle, myślę że mnie zrozumiesz). Wiem, że chce jakby gotowce, ale tylko w praktyce się uczę najlepiej i gdy dostanę jakiś skrypt, zaczne go "rozgryzać". Z góry dziękuję.


([alex]) #10

Zapisz jako ...

TSaveDialog paleta Dialogs

if SaveDialog1.Execute then begin FileName:=SaveDialog1.FileName; ... end;

Kliknięcie na StaticText ...

Zdarzenie OnClick

Z batchem ...

TMemo standardowa paleta

Memo1.Lines.LoadFromFile(FileName);


(Kamilmlody5) #11

hmm. Takto dzięki, ale możesz dać mi cały skrypt z save dialog? Nie wiem zabardzo gdzie mam go dodać. Ikonke dodałem, ale nie wiem jak go do skryptu wpisać. Po prostu jak przekształcić skrypt:

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

INI := TINIFile.Create('config.ini');

try

INI.WriteString('glowne', 'ip', IP.Text);

INI.WriteString('glowne', 'port', PORT.Text);

INI.WriteString('glowne', 'haslo', LabeledEdit1.Text);

finally

INI.Free;

end;

A i jeszcze jedno pytanie. Myślę, że bardzo łatwe. Jak zrobić coś jakby chat, ale nie do końca w tym znaczeniu. Po prostu chcę wstawić TMemo i Edit. I po wpisaniu w edit jakiegoś tekstu automatycznie wpisało mi się to w TMemo.


([alex]) #12
  1. zamiast ... w kodzie co ja podałem wstawiasz swój zapis do pliku, zamiast 'config.ini' - FileName

  2. Memo1.Lines.Add(Edit1.Text);


(Kamilmlody5) #13

Dzięki, a mógłbyś jeszcze dać komende, że po przyciśnięciu jakiegoś przycisku zamyka okienko(form2)?

A i jeszcze jak dodałem ten skrypt na zapis, wywala mi błąd: undecleared indetifier: 'FileName'. Co robię źle?


([alex]) #14
  1. Form2.Close;

  2. zmienną zadeklaruj typu string oczywiście, lub podstawiaj nazwę bez pośrednictwa zmiennej.


(Kamilmlody5) #15

OK. Dzięki