Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.10.2011, 00:10
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию очистка memo из обработчиков других событий

На форме расположен компонент memo и несколько кнопок.Как правильно сделать отдельную процедуру в которой будет обрабатываться очистка memo и например вызваться вывод текста?
например есть процедура
Код:
procedure TForm1.Button1Click(Sender: TObject);
var

begin
  memo1.Clear;
  memo1.Lines[0]:='парам';
end;
в которой я что то делаю,могу очищать memo и т.д,как быть если нужно вынести
Код:
  memo1.Clear;
  memo1.Lines[0]:='парам';
в отдельную процедуру и потом нужно внутри procedure TForm1.Button1Click(Sender: TObject); вызывать её?
в учебниках пока что не нашёл ответа.
Ответить с цитированием
  #2  
Старый 06.10.2011, 00:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Примерно так:
Код:
  TForm1 = class(TForm)
  ...
  public
    procedure MemoClear;
  end;

procedure TForm1.MemoClear;
begin
  memo1.Clear;
  memo1.Lines[0]:='парам';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MemoClear;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 06.10.2011, 00:48
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Спасибо,всё работает!Вы мне можете посоветовать хорошую книгу на русском,купил Флёнова "библию delphi",но иногда бывает её мало или не полно в ней что то отражено.
Ответить с цитированием
  #4  
Старый 06.10.2011, 00:58
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Для меня лучшей книгой было F1 и исходный код Дельфи. Бумажные книги помогли мало.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 06.10.2011, 09:51
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

вот такой вариант тоже будет работать.
Иногда удобно запускать одну и ту же процедуру от нескольких кнопок.
Здесь двум кнопкам назначен один и тот же обработчик который вызавает процедуру очистки.

Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure ButtonsClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure MemoClear(Sender:TObject);
begin
with Form1 do
    begin
    memo1.Clear;
    if Sender=Button1 then memo1.Lines[0]:='Нажата кнопка 1'
    else if Sender=Button2 then memo1.Lines[0]:='Нажата кнопка 2';
    end;
end;

procedure TForm1.ButtonsClick(Sender: TObject);
begin
  MemoClear(Sender);
end;
Ответить с цитированием
  #6  
Старый 06.10.2011, 19:04
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

ок! ещё вопрос возник по ходу написания.я все эти процедуры описываю в одном Unit1 например,как сделать я могу обратится к ней (memo1 ) в другом Unit2? Простое прописывание этой процедуры - делфи ругается что memo1 не определена.как на неё сослаться в другом unit.
Ответить с цитированием
  #7  
Старый 06.10.2011, 19:41
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Как вриант можете написать: "Имя_формы.компонент"
Можете в процедуру/функцию передать по примеру
Код:
procedure ShowMatrInSG(const M:TMatr;nCol,nRow:integer;SG:TStringGrid);
Вызывать так
Код:
ShowMatrInSG(M,nCol,nRow,SG)
Ответить с цитированием
  #8  
Старый 06.10.2011, 21:38
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

для этого надо сделать 2 вещи
1.- в модуле Unit2 сделать ссылку на модуль Unit1

Код:
implementation
    uses Unit1

во вторых в модуле Unit1 надо функцию ClearMemo определить в интерфейсном разделе
Код:
unit1

interface

ClearMemo(Sender:TObject);

теперь ты из модуля Unit2 можешь вызвать функцию ClearMemo, определенную в модуле Unit1

Замечение
Старайся избегать циклических ссылок (модуль Unit1 ссылается на Unit2, а модуль Unit2- на Unit1).
В крайнем случае прописывай их в разделе implementation
Но при этом может получиться что компиляция программы будет зависеть от порядка в котором перечислены модули в файле .dpr
Ответить с цитированием
  #9  
Старый 06.10.2011, 23:14
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Понял,циклические ссылки уже успел понаделать,но не компилировалось,ошибка была.
Ответить с цитированием
  #10  
Старый 07.10.2011, 16:41
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

а если у меня есть такая процедура
Код:
procedure Tbase.Show;
begin
memo1.Clear;//здесь я хочу иметь возможность обращаться к memo1
end;
Tbase - мой класс,Show соответственно его процедура,с помощью которой я хочу вывести поля класса в Memo,Show находится в Published моего класса,Memo тоже в TForm1 в Published,я как то могу из вот такого метода моего класса обратится к Memo(писать в него,удалять и т.д.) или это нужно как то по другому делать?
Ответить с цитированием
  #11  
Старый 08.10.2011, 17:31
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Подскажите кто может в таком вопросе!
у меня есть задание
"Определить базовый класс с именем Tbase и полями данных
определенными в варианте задания. Включить в класс методы,
обеспечивающие:
-заполнение полей данных;
-отображение (вывод ) полей данных;"
я делал так
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  Sportsmen:Tbase;
implementation

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

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

{$R *.dfm}
begin
Sportsmen:=Tbase.Create;
end.
в модуле parent такое описание -
Код:
unit Parent;

interface

type
  Tbase=class
private
  constructor Create;
public
  fSurname:ShortString;
  fName:ShortString;
  procedure Vvod;
  procedure Vyvod;
  end;

implementation

constructor Tbase.Create;
begin
  fSurname:='';
  fName:='';
end;

procedure Tbase.Vvod;
begin
//
end;

procedure Tbase.Vyvod;
begin
//
end;

end.
когда я хочу в процедуде Tbase.Vvod написать fName:=edit1.text и вставить это в обработчик нажатия кнопки 1 - это ошибка.Никак не могу понять как действовать в таком случае.Содя по заданию мне ввод и вывод нужно сделать в методах класса.Возможно я не так что то понимаю.Подскажите!Давно уже с этим бьюсь..
Ответить с цитированием
  #12  
Старый 08.10.2011, 21:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У тебя масса недочётов:
1. Это не класс
Код:
type
  Tbase=class
private
  constructor Create;
public
  fSurname:ShortString;
  fName:ShortString;
  procedure Vvod;
  procedure Vyvod;
  end;

измени примерно так:
Код:
type
  Tbase = class
  private
    fSurname : String;
    fName : String;
    procedure SetName(Value : String);
    procedure SetSurName(Value : String);
  public
    constructor Create;

    property Name : String read fName write SetName;
    property SurName : String read fSurName write SetSurName;
  end;

implementation

constructor Tbase.Create;
begin
  fSurname : ='';
  fName : ='';
end;

procedure Tbase.SetName(Value : String);
begin
  if Value <> fName then
    fName := Value;
end;

procedure Tbase.SetSurName(Value : String);
begin
  if Value <> fSurName then
    fSurName := Value;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 09.10.2011, 00:54
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

в том что вы написали я разобрался.но вопрос всё равно тот же.я могу в этом модуле обращаться к memo,edit и т.п.?и нужно ли это делать именно здесь?
Ответить с цитированием
  #14  
Старый 09.10.2011, 00:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну и пиши:
Код:
  Sportsmen.Name := edit1.text;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 09.10.2011, 01:21
badtrips badtrips вне форума
Прохожий
 
Регистрация: 06.06.2011
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Ну и пиши:
Код:
  Sportsmen.Name := edit1.text;
если я делаю это в модуле то [Error] Parent.pas(36): Undeclared identifier: 'edit1',а по заданию как я понял надо именно в нём
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025