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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2012, 17:05
tiberianss tiberianss вне форума
Прохожий
 
Регистрация: 27.09.2012
Сообщения: 4
Репутация: 10
По умолчанию Великая проблема с процедурой

Вот тут вот кажется всё просто???
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    str1: TEdit;
    Button1: TButton;
    str2: TEdit;
    str3: TEdit;
    str4: TEdit;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);

   private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;
  procedure vgrids;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
begin
vGrids(0,'12~12~3~456~23);
end;

procedure vGrids(j: integer; str: string; a:TStringGrid);
var i, si :integer;  st:string;
begin
for i:=1 to Length(str)+1 do
  begin
    if (str[i]='~') or (i=Length(str)+1) then
       begin
       if j=0 then a.ColCount:=  a.ColCount+1;
       a.Cells[si,0]:=st;
       st:='';
       si:=si+1;
       end
    else
   st:=st+str[i];
  end;
  end;
end.
А не тут то было, то много аргументов в процедуру ввожу, то не правильно объявил, вообщем беда. Как поправить то??? Задача сводиться к тому что есть строки (str: string) с тильдами и числами и надо записать числа в нужную строку (j: integer) стрингрида (a:TStringGrid)
Ответить с цитированием
  #2  
Старый 27.09.2012, 17:13
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от tiberianss
Вот тут вот кажется всё просто???
Код:
...
procedure vGrids(j: integer; str: string; a:TStringGrid);
var i, si :integer;  st:string;
begin
for i:=1 to Length(str)+1 do
  begin
    if (str[i]='~') or (i=Length(str)+1) then
       begin
       if j=0 then a.ColCount:=  a.ColCount+1;
       a.Cells[si,0]:=st;
       st:='';
       si:=si+1;
       end
    else
   st:=st+str[i];
  end;
  end;
end.
А не тут то было, то много аргументов в процедуру ввожу, то не правильно объявил, вообщем беда. Как поправить то??? Задача сводиться к тому что есть строки (str: string) с тильдами и числами и надо записать числа в нужную строку (j: integer) стрингрида (a:TStringGrid)
Во-первых у тебя не проинициализирована переменная si.
Во-вторых не нужно прибавлять единицу к длине строки.

UPD. А, всё, я понял зачем прибавляется единица к длине строки - второе моё замечание прошу считать недействительным

Последний раз редактировалось poli-smen, 27.09.2012 в 17:18.
Ответить с цитированием
  #3  
Старый 27.09.2012, 17:19
tiberianss tiberianss вне форума
Прохожий
 
Регистрация: 27.09.2012
Сообщения: 4
Репутация: 10
По умолчанию

su: integer;
а если не прибавить 1 то не получишь последнее значение
Ответить с цитированием
  #4  
Старый 27.09.2012, 17:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от tiberianss
su: integer;
Во-первых не su, а si, а во-вторых я говорил не о объявлении этой переменной, а об её инициализации. Т.е. перед циклом нужно сделать:
Код:
si := 0;
Цитата:
Сообщение от tiberianss
а если не прибавить 1 то не получишь последнее значение
Я уже понял зачем там прибавляется единица. В предыдущем своём сообщении я поправился.
Ответить с цитированием
  #5  
Старый 27.09.2012, 17:30
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Ага. Вот ещё здесь ошибка:
Цитата:
Сообщение от tiberianss
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
begin
vGrids(0,'12~12~3~456~23);
end;
Вызывать нужно (видимо) так:
Код:
  vGrids(0,'12~12~3~456~23', StringGrid1);
Ответить с цитированием
  #6  
Старый 28.09.2012, 08:33
tiberianss tiberianss вне форума
Прохожий
 
Регистрация: 27.09.2012
Сообщения: 4
Репутация: 10
Печаль

Поправил процедуру, как вы говорили)))
Смысл от этого не поменялся.
implementation

{$R *.dfm}

Код:
procedure TForm1.Button1Click(Sender: TObject);

begin
vGrids(1,'jy~~~~~34~',StringGrid1);
end;

procedure vGrids(j: integer; str: string; a:TStringGrid);
var i, si :integer;  st:string;
begin
si:=0;
for i:=1 to Length(str)+1 do
  begin
    if (str[i]='~') or (i=Length(str)+1) then
       begin
       if j=0 then a.ColCount:=  a.ColCount+1;
       a.Cells[si,0]:=st;
       st:='';
       si:=si+1;
       end
    else
   st:=st+str[i];
  end;
  end;
end.
Выдаеться ошибка:
[Error] Unit1.pas(36): Too many actual parameters(((((
Ответить с цитированием
  #7  
Старый 28.09.2012, 08:59
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Если процедура не объявлена в интерфейсе, то подними ее выше того места где вызываешь.
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием
  #8  
Старый 28.09.2012, 09:07
tiberianss tiberianss вне форума
Прохожий
 
Регистрация: 27.09.2012
Сообщения: 4
Репутация: 10
По умолчанию

Я удалил объявление процедуры в шапке, и поставил её ниже процедуры обработки клика. Всё заработало спасибо. Но если процедуру не ставить выше, где её требуеться объявлять и каким образом???
Ответить с цитированием
  #9  
Старый 28.09.2012, 09:12
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Перед implementation.

Если процедура такая:
Код:
procedure A(b: string; c: MyType);
var
i: Integer;
begin
...
end;
То объявлять так:
Код:
procedure A(b: string; c: MyType);
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110

Последний раз редактировалось ~TB~, 28.09.2012 в 09:15.
Ответить с цитированием
  #10  
Старый 28.09.2012, 09:13
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

>to tiberianss
>Но если процедуру не ставить выше, где её требуеться объявлять и каким образом???

В Вашем первом посте строчки 28 и 39 должны быть одинаковыми.
Ответить с цитированием
  #11  
Старый 28.09.2012, 09:14
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure vGrids(j: integer; str: string; a:TStringGrid);
var i, si :integer;  st:string;
begin
si:=0;
for i:=1 to Length(str)+1 do
  begin
    if (str[i]='~') or (i=Length(str)+1) then
       begin
       if j=0 then a.ColCount:=  a.ColCount+1;
       a.Cells[si,0]:=st;
       st:='';
       si:=si+1;
       end
       else st:=st+str[i];
       end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 vGrids(0,'12~12~3~456~23',StringGrid1);
end;

end.
Пользуйся.
__________________
11011111 INED Home code
VK
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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