Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Incompatible types: method pointer and regular procedure / 9 сообщений из 9, страница 1 из 1
25.03.2021, 20:21
    #40057010
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
program ReportBuilder;

uses
  Winapi.Windows, .........

var
  myDesigner: TppDesigner;
  myReport: TppReport;
  procedure myClose(Sender: TObject; var Action: TCloseAction);

  procedure myClose(Sender: TObject; var Action: TCloseAction);
  begin
    if myDesigner.MyReport.Modified then begin
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
      begin
        MyReport.Template.SaveToFile;
      end;
    end;
  end;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  myDesigner := TppDesigner.Create(Application);

  myReport := TppReport.Create(Application);
  myDesigner.Report := myReport;
  myDesigner.OnClose := myClose;
  myDesigner.ShowModal;

  Application.Run;
end.



Имеется кусок кода (открывалка отчетов).
Работает нормально, только без вызова myClose (Захотелось сдклать красиво, чтобы проверялось перед закрытием - нет ли открытых файлов).
Возможно проблема в том, что код непосредсственно в коде dpr файла, но возможно и нет.

То есть делаю по аналогии с примерами, где динамически создавалась кнопка и туду же и там же вешался обработчик.
У метода OnClose тип почему-то Handler , а у моей процедуры - method.
То есть ошибка [dcc32 Error] ReportBuilder.dpr(51): E2009 Incompatible types: 'method pointer and regular procedure'.
Как их подружить?

Так же в данном коде
Код: pascal
1.
procedure myClose(Sender: TObject; var Action: TCloseAction);

не видны обьекты
myDesigner и MyReport. Это тоже следствие того, что код в dpr прямо?


Что делать?

Заранее признателен за советы.
...
Рейтинг: 0 / 0
25.03.2021, 20:27
    #40057012
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
bzumsЧто делать?

1. Изучить язык Дельфи.
2. Сделать myClose методом класса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.03.2021, 20:56
    #40057016
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
Первый пункт понятен, тут без вопросов.
Как любителю мне это сделать тяжело.

Второй пункт - Сделать myClose методом класса -тоже немного не понятен. Где это можно посмотреть.
В Дельфи 7 разве такое было?

Спасибо
...
Рейтинг: 0 / 0
25.03.2021, 21:10
    #40057019
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
bzums
В Дельфи 7 разве такое было?
Это было в делфи 1. Код - дичь. Да и проверять надо на OnCloseQuery
...
Рейтинг: 0 / 0
25.03.2021, 21:12
    #40057021
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
bzums
Код: pascal
1.
Winapi.Windows

Не припоминаю, чтобы это было в Delphi 7.
...
Рейтинг: 0 / 0
25.03.2021, 23:06
    #40057039
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
type
TMyReport = class(TppReport)
  procedure myClose(Sender: TObject; var Action: TCloseAction);
end;

var
  myDesigner: TppDesigner;
  myReport: TMyReport;

procedure TMyReport.myClose(Sender: TObject; var Action: TCloseAction);
begin
    if myDesigner.MyReport.Modified then 
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
        Template.SaveToFile;
end;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  myDesigner := TppDesigner.Create(Application);

  myReport := TMyReport .Create(Application);
  myDesigner.Report := myReport;
  myDesigner.OnClose := myDesigner.myClose;
  myDesigner.ShowModal;

  Application.Run;
end.


[/quot]
...
Рейтинг: 0 / 0
25.03.2021, 23:15
    #40057043
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
bzumsКак любителю мне это сделать тяжело.

Это ты, типа, на жалость давишь? "Подайте убогому инвалиду умственного труда"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.03.2021, 23:25
    #40057046
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
bzums
Первый пункт понятен, тут без вопросов.
Как любителю мне это сделать тяжело.

Тогда остаётся нанять профессионала.

P.S. В седой древности писал я вот эту статью: http://rsdn.org/article/delphi/Handlers.xml В том числе в ней говорится о Вашей проблеме и о возможных путях её решения. Прочитайте и хоть секунду подумайте перед тем, как выбрать для использования наихудший.
...
Рейтинг: 0 / 0
26.03.2021, 13:13
    #40057142
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Incompatible types: method pointer and regular procedure
DimaBr
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TMyReport.myClose(Sender: TObject; var Action: TCloseAction);
begin
    if myDesigner.MyReport.Modified then 
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
        Template.SaveToFile;
end;

Заменить на
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TMyReport.myClose(Sender: TObject; var Action: TCloseAction);
begin
    if Modified then 
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
        Template.SaveToFile;
end;

или еще лучше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TMyReport.myClose(ASender: TObject; var Action: TCloseAction);
var
  LSender: TppReport;
begin
  LSender := ASender as TppReport;
  if LSender.Modified then 
    if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
      LSender.Template.SaveToFile;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Incompatible types: method pointer and regular procedure / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]