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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 24.03.2008, 17:58
DeadMan89 DeadMan89 вне форума
Прохожий
 
Регистрация: 22.03.2008
Сообщения: 9
Репутация: 10
По умолчанию

еще вопросик, как передать запрос в функцию getanswer?
Ответить с цитированием
  #17  
Старый 24.03.2008, 17:58
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от DeadMan89
при компиляции пишет Procedure cannot have a result type
Замените procedure на function в заголовке
Код:
procedure GetAnswer(SQuestion: String): String;
Моя описка.
Ответить с цитированием
  #18  
Старый 24.03.2008, 18:03
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от DeadMan89
еще вопросик, как передать запрос в функцию getanswer?
В смысле? Что значит "как передать запрос"? Если вы имеете в виду как вызвать функцию, то:
Код:
Anwer := GetAnswer('Каг дила?');
А в файле у вас, например, строка "Каг дила?;Дила харашо!". Т.е. в Answer после вызова функции будет строка "Дила харашо!".

Вы не обижайтесь, но не рано вы взялись за такой масштабный проект? По-моему есть смысл почитать книжку какую-нибудь по Паскалю.
Ответить с цитированием
  #19  
Старый 24.03.2008, 18:09
DeadMan89 DeadMan89 вне форума
Прохожий
 
Регистрация: 22.03.2008
Сообщения: 9
Репутация: 10
По умолчанию

все вроде бы сделал,но ошибка
[Error] Unit1.pas(60): Unsatisfied forward or external declaration: 'TForm1.GetAnswer'

и какого типа должна быть переменная Anwer?Которой присваиваем функцию, могу весь код выложить исправите?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ICQClient, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    ICQClient1: TICQClient;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    GroupBox2: TGroupBox;
    Memo1: TMemo;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Memo2: TMemo;
    GroupBox5: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    CheckBox1: TCheckBox;
    Label6: TLabel;
    Edit6: TEdit;
    Timer1: TTimer;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    GroupBox6: TGroupBox;
    Button3: TButton;
    fileopen: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    procedure N1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Memo2KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ICQClient1Login(Sender: TObject);
    procedure ICQClient1ConnectionFailed(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    function GetAnswer(SQuestion: String): String;
    function DivStr(const SourceStr: String; var SubStr1, SubStr2: String): Boolean;


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ICQClient1.UIN:=strtoint(combobox1.Text);
ICQClient1.Password:=Edit1.Text;
ICQClient1.Login();
end;

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

procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var a:string;
begin
Memo1.Lines.Add('('+(DateToStr(Date))+' ('+(TimeToStr(Time))+'))');
Memo1.Lines.Add(' '+UIN+': ' + msg);
Memo1.Lines.Add('');
Edit6.text:=(UIN);
a:= GetAnswer(msg);
ICQClient1.SendMessage((StrToInt(UIN)),a);
end;

procedure TForm1.N1Click(Sender: TObject);
begin
icqclient1.Disconnect;
Close;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked=true then
Groupbox5.visible:=true
else
Groupbox5.visible:=false;
end;

procedure TForm1.Memo2KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then
begin
ICQClient1.SendMessage((StrToInt(Edit6.Text)),Memo2.Lines.Text);
Memo1.Lines.Add('('+(DateToStr(Date))+' ('+(TimeToStr(Time))+'))');
Memo1.Lines.Add(' Вы: '+Memo2.Text);
Memo2.Lines.clear;
end;
end;

procedure TForm1.ICQClient1Login(Sender: TObject);
begin
if ICQClient1.LoggedIn then
begin
Memo1.Lines.Add('Соединение с сервером установлено.');
Timer1.Enabled := True;
end;
end;

procedure TForm1.ICQClient1ConnectionFailed(Sender: TObject);
begin
Memo1.Lines.Add('Не удалось соединиться с сервером.');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ICQClient1.SendKeepAlive;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
ICQClient1.Login();
end;

procedure TForm1.N4Click(Sender: TObject);
begin
icqclient1.Status:=1;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
icqclient1.Status:=2;
end;

procedure TForm1.N6Click(Sender: TObject);
begin
icqclient1.Status:=4;
end;

procedure TForm1.Button3Click(Sender: TObject);
var f:file;
begin
fileopen.Execute;
assignfile(f,fileopen.FileName);
end;

function GetAnswer(SQuestion: String): String;
var
  Dlg: TOpenDialog;
  FileStrings: TStringList;
  SFileName: String;

function DivStr(const SourceStr: String; var SubStr1, SubStr2: String): Boolean;
var
  i: Integer;
begin
  i := Pos(';', SourceStr);
  if i <> 0 then begin
    SubStr1 := Copy(SourceStr, 1, i - 1);
    SubStr2 := Copy(SourceStr, i + 1, Length(SourceStr) - i);
  end;
  Result := i <> 0;
end;

function FindAnswer: String;
  var
    i: Integer;
    S1, S2: String;
  begin
    Result := '';
    for i := 0 to FileStrings.Count - 1 do
       if DivStr(FileStrings[i], S1, S2) then
         if AnsiCompareText(SQuestion, S1) = 0 then begin
           Result := S2;
           Exit;
         end;
  end;

begin
  Result := '';

  Dlg := TOpenDialog.Create(Application);
  try
    if Dlg.Execute
      then SFileName := Dlg.FileName
      else SFileName := '';
  finally
    Dlg.Free;
  end;

  if Length(SFileName) = 0 then Exit;

  FileStrings := TStringList.Create;
  try
    FileStrings.LoadFromFile(SFileName);
    Result := FindAnswer;
  finally
    FileStrings.Free;
  end;
end;


end.

Admin: Не путать CODE с QUOTE

Последний раз редактировалось Admin, 24.03.2008 в 20:05.
Ответить с цитированием
  #20  
Старый 24.03.2008, 18:14
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от DeadMan89
все вроде бы сделал,но ошибка
[Error] Unit1.pas(60): Unsatisfied forward or external declaration: 'TForm1.GetAnswer'
Это потому, что если вы хотите сделать функцию членом класса формы, то в описании формы нужно эту функцию объявить:
Код:
TForm1 = class(TForm)
  ...
public
  ...
  function GetAnswer(SQuestion: String): String;
  ...
end;
а в реализации функции написать:
Код:
function TForm1.GetAnswer(SQuestion: String): String;
Но вообще это не обязательно, эта функция может быть и автономной.

Цитата:
и какого типа должна быть переменная Anwer?Которой присваиваем функцию
Ну, раз функция возвращает String, то и переменная, наверное, должна быть типа String, как вы думаете?

Последний раз редактировалось Rosenkrantz, 24.03.2008 в 18:28.
Ответить с цитированием
  #21  
Старый 24.03.2008, 18:14
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Попробуй нажать Ctrl+Shift+C
Должна появиться заготовка нужных функций. И перенеси код уже туда.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #22  
Старый 24.03.2008, 18:16
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от DeadMan89
могу весь код выложить исправите?
Нет, спасибо, код ваш я править не хочу. Мне проще новый написать будет.
Ответить с цитированием
  #23  
Старый 24.03.2008, 19:19
DeadMan89 DeadMan89 вне форума
Прохожий
 
Регистрация: 22.03.2008
Сообщения: 9
Репутация: 10
По умолчанию

Напишите плиз новый код, а я его под себя подправлю, с меня бутылка пива, буду очень благодарен, просто файлы реально не знаю=(
Ответить с цитированием
  #24  
Старый 25.03.2008, 16:16
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от DeadMan89
Напишите плиз новый код, а я его под себя подправлю, с меня бутылка пива, буду очень благодарен, просто файлы реально не знаю=(
Я ведь вам про файлы уже все написал, что вы спрашивали. Если что-то еще непонятно, спрашивайте, я постараюсь ответить. Иногда бывает, я пишу целиком код задачи, если задача мне интересна самому или код небольшой, но в данном случае не хочу.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter