Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TEdit, Кнопка и PathDialog / 10 сообщений из 10, страница 1 из 1
17.06.2021, 23:03
    #40078436
alex_od_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Привет Парни... Без Вас ну никак...))))

Есть 2 формы. На одной форме два Эдита и две кнопки... На другой форме PathDialog c ShellTreeView и Эдитом...
Если на первой форме кликнуть мышей на любом Эдите, то открывается вторая форма, где можно выбрать каталог, название которого отображается на Эдите второй формы. Далее жмешь Ок или Отмену (по барабану что жать) и с Эдита второй формы, текст переходит в Эдит, первой формы на которой был фокус... Все работает замечательно...

НО, прикрутив кнопки к Эдитам на первой форме, вызов второй формы происходит - НО результат в Эдит не возвращается...

Подскажите что не так... SetFocus, (Sender), (Self) не предлагать...))))

Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Forms, Controls, Dialogs,
  Variants, ComCtrls, StdCtrls, Buttons, ShellCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Edit1Click(Sender: TObject);
    procedure Edit2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses PathDialog;

{$R *.dfm}

procedure TForm1.Edit1Click(Sender: TObject);
begin
     Form2.ShowModal;
    (Sender as TEdit).Text := Form2.Edit1.Text;
end;

procedure TForm1.Edit2Click(Sender: TObject);
begin
     Form2.ShowModal;
    (Sender as TEdit).Text := Form2.Edit1.Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     Edit1Click(nil);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     Edit2Click(nil);
end;

end.



Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
unit PathDialog;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Forms, Controls, Dialogs,
  Variants, ComCtrls, StdCtrls, Buttons, ShellCtrls;

type
  TForm2 = class(TForm)
    ShellTreeView1: TShellTreeView;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
end;

var
  Form2: TForm2;

implementation

uses MainForm;

{$R *.DFM}

procedure TForm2.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Edit1.Text := '';
  Edit1.Text := ShellTreeView1.Path;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  if ShellTreeView1.IsEditing then begin
    ModalResult := mrNone;
    ShellTreeView1.Selected.EndEdit(False);
    ShellTreeView1.SetFocus;
  end else begin
    ModalResult := mrOk;
   end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin       
  if ShellTreeView1.IsEditing then
  ModalResult := mrNone
  else
  ModalResult := mrCancel;
end;

end.
...
Рейтинг: 0 / 0
17.06.2021, 23:10
    #40078437
alex_od_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Или только имитацией в Эдит мышей нужно делать на кнопке..???
...
Рейтинг: 0 / 0
18.06.2021, 00:14
    #40078446
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Включи мозг: у тебя в процедуре результат присваивается эдиту, переданному как Sender. А
потом ты её вызываешь с Sender = nil. Куда, ты ожидаешь, пойдёт присвоение?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.06.2021, 00:22
    #40078448
alex_od_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Dimitry Sibiryakov

Включи мозг: у тебя в процедуре результат присваивается эдиту, переданному как Sender. А
потом ты её вызываешь с Sender = nil. Куда, ты ожидаешь, пойдёт присвоение?..


Если вызывать Edit1Click(Sender); то ошибка выскакивает...
...
Рейтинг: 0 / 0
18.06.2021, 00:32
    #40078449
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Включи мозг ещё раз: Sender в этом месте TButton. Как ни крути, его не приведёшь к TEdit.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.06.2021, 00:46
    #40078451
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Ваша вторая форма возвращает выбранный каталог.
Для этого реализовываем функцию в форме выбора каталога
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function GetFolder(var Path: string): boolran;
begin
  with TForm2.Create(Application) do
  try
    if ShowModal = mrOk then Path := Edit1.Text;
  finally
    Free;
  end;
end;



Теперь в первой форме код будет следующим
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TForm1.Button1Click(Sender: TObject);
var S: string;
begin
  if GetFolder(S) then Edit1.Text := S;
end;

procedure TForm1.Button2Click(Sender: TObject);
var S: string;
begin
  if GetFolder(S) then Edit2.Text := S;
end;
...
Рейтинг: 0 / 0
18.06.2021, 01:05
    #40078452
alex_od_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
DimaBr Спасибо, но все равно не возвращает результат в Эдит...
...
Рейтинг: 0 / 0
18.06.2021, 01:36
    #40078453
alex_od_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
DimaBr, если в функции заремить try, finally и Free то результат возвращается в Эдит...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function GetFolder(var Path: string): Boolean;
begin
  with TForm2.Create(Application) do
 // try
    if ShowModal = mrOk then Path := Form2.Edit1.Text;
 // finally
 //  Free;
 // end;
end;
...
Рейтинг: 0 / 0
18.06.2021, 02:04
    #40078456
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Привет.

alex_od_
DimaBr, если в функции заремить try, finally и Free то результат возвращается в Эдит...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function GetFolder(var Path: string): Boolean;
begin
  with TForm2.Create(Application) do
 // try
    if ShowModal = mrOk then Path := Form2.Edit1.Text;
 // finally
 //  Free;
 // end;
end;


Это просто совпадение. Без Free будет утечка памяти.

В варианте GetFolder от DimaBr не присваивается результат.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function GetFolder(var aPath: string): boolean;
begin
  with TForm2.Create(Application) do
  try
    Result := ShowModal = mrOk;
    if Result then   aPath := Edit1.Text;
  finally
    Free;
  end;
end;
...
Рейтинг: 0 / 0
18.06.2021, 02:18
    #40078459
alex_od_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEdit, Кнопка и PathDialog
Polesov
Привет.
В варианте GetFolder от DimaBr не присваивается результат.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function GetFolder(var aPath: string): boolean;
begin
  with TForm2.Create(Application) do
  try
    Result := ShowModal = mrOk;
    if Result then   aPath := Edit1.Text;
  finally
    Free;
  end;
end;



Привет Polesov ... Огромнейшее Спасибо.... Работает...)))) Всем Спасибо...Крепкого Здоровья и Удачи...
Polesov Персональное тебе Спасибище...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TEdit, Кнопка и PathDialog / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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