[Delphi] Problem z działaniem procedury

0

Wykonuje operacje na wartościach recordu (X, Y, Picture, NowyTyp(Tym deklarowany przeze mnie))
Ale nie chce cały czas robić

Image1.Left := Record.X;
Image1.Top ;= Record.Y;
Image1.Picture := Record.Picture;

Więc dodałem procedurkę Refresh

procedure Refresh;
begin
 [...Kod jak wyżej...]
end;

Ale niestety procedurka Refresh nie działa. Mianowicie wstawiłem w kod instrukcje ShowMessage, przed instrukcją wywołującą Refresh i po niej. Obie wyświetliły okno.
Niestety SM w procedurze Refresh nie wyświetliła okna :C

Co robić?

0

jakiego okna? gdzie ty masz tam jakieś okno?

0

Przykład:

procedure Form1.Button1OnClick(Sender: TObject);
begin
 ShowMessage('Przed Refresh')
 Refresh; 
 ShowMessage('Po Refresh');
end;

procedure Refresh;
begin
ShowMessage('Refresh');
{Jakis kod}
end;

Wyświetla mi tylko te dwa Przed Refresh, i Po Refresh;

1

Po pierwsze kod jaki wkleiłeś nie ma się prawa skompilować.
Poza tym wywołujesz metodę Refresh Formatki więc ona się,
zgodnie z tym co pisze w helpie, wywołała. Trzeba myśleć [!!!]

Repaints the control on the screen.

Delphi syntax:

procedure Refresh;

C++ syntax:

void __fastcall Refresh(void);

Description

Call Refresh method to repaint the control immediately. Refresh calls the Repaint method. Use the Refresh and Repaint methods interchangeably.

Zrób tak, a zadziała:

procedure UczSiePodstawPanieRefresh;
begin
  ShowMessage('Refresh');
end;

procedure TForm1.Button1Click(Sender : TObject);
begin
  ShowMessage('Przed Refresh');
  UczSiePodstawPanieRefresh;
  ShowMessage('Po Refresh');
end;
0

Tylko po pierwsze to nie jest aplikacja konsolowa, więc ma prawo się skompilować i kompiluje się.

0

Coś kręcisz - bo poniższy kod w konsolowej, też zadziała.
Mylące dla mnie było to, że piszesz kod z klasami, także
założyłem że robisz to w VCL, ale wiadomo w konsoli też
można używać formatek. Jednak jeśli wywołasz sobie dla
TForm1 metodę Refresh; a bez jej nadpisywania słowem
kluczowym override; to wykona ona to co robi ta metoda
dla klasy bazowej czyli TCustomForm, a więc odświeży i.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Dialogs;

procedure Refresh;
begin
  ShowMessage('Refresh');
end;

begin
  ShowMessage('Przed Refresh');
  Refresh;
  ShowMessage('Po Refresh');
end.
0

Shit!? To jest już taka metoda "Refresh"? W życiu bym nie powiedział
Czyli jak ją pisze to wykonuje się ta napisana przez programistów delphi a nie przeze mnie?

0

No cały czas Ci o tym pisze, czytaj uważnie. Wkleiłem Tobie nawet
cytat z pliku pomocy dołączonego do Delphi 7. Możesz te metodę,
jeżeli musisz nadpisać, lecz to wymaga stworzenia klasy, która też
dziedziczy z Forms.TCustomForm i użycie słowa kluczowego, które
zostało opisane tutaj: Override i
w przypadku tej metody się nie uda - gdyż nie jest ona virtualna.

0

Nie wiem czy mówimy o tym samym.
Programuje Obiektowo! Nie porównujcie moich kodów do tych konsolowych.

Jeżeli zmienie nazwę tej procedury, na taką której nie ma w delphi, to wszystko pójdzie?

Tak, pomogło

0

Piszesz coś, że kodzisz w konsolowej aplikacji, nie piszesz że w WinAPI,
bo nadal używasz klas i obiektów w modułach innych, niż Windows albo
Messages, a pisałeś, że pod konsolą nie działa - to udowodniłem Tobie,
że jednak działa. Jak sam w końcu doszedłeś, nadanie innej nazwy ten
problem rozwiąże, ale dawno byś na to wpadł gdybyś nie podążał za tą
"modą", którą jest niekorzystanie z google i z wbudowanego helpa ;/

0

Nie powiedziałem że nie pisze w konsoli, i nie powiedziałem że NIE ZADZIAŁA na konsoli tylko że ZADZIAŁA w obiektowym.

A z googli na pewno bym nie skorzystał, bo nigdy bym nie przypuszczał że ktoś może mieć taki problem, że wymyślił już istniejącą procedurę.

0

Dzięki

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