Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача параметров


Страницы:   1 2

Cabrera ©   (2004-08-06 11:07:00) 

Подскажите плиз чайнику, как передать несколько параметров (типа Ineger) от одного обработчика нажатия кнопки к другому (ButtonClick1 -> ButtonClick 2)? И сделать так, чтобы вторая кнопка стала доступной только после нажатия первой (отработки первого обработчика) ?


Юрий Зотов   (2004-08-06 14:43:00) [1]

> Cabrera

type
 TForm1 = class(TForm)
   ...
 private
   FParam1: Integer;
   FParam2: Integer;
   ...
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ...
 FParam1 := ...;
 FParam2 := ...;
 ...
 Button2.Enabled := True
end;

procedure TForm1.Button2C1lick(Sender: TObject);
begin
 ... // Здесь доступны все FParamX
end;


Erik1   (2004-08-06 14:43:00) [2]

Вот по этому тебе и говорили о вреде глобальных переменых!
Блин да создай ты record и опиши его в своеом классе.
RMyRecord = record
numDiapBegin5, numDiapEnd5, numDiapBegin10, numDiapEnd10,
numDiapBegin20, numDiapEnd20, numDiller, skidkaDiller,
numCards5, numCards10, numCards20: integer;
end;
...
private
MyVar: RMyRecord;
..
end;
Обращатся будеш MyVar.numDiapBegin5 покрайней мере незапутаешся.


Cabrera   (2004-08-06 14:36:00) [3]

2 Digitman ©

Сори, конечно, но
>> вот и передавай их - я и пытаюсь спросить как...

Сори, если коряво, но уж как умею, тем более что в delpi - абсолютный чайник :(((


Digitman   (2004-08-06 14:30:00) [4]

вот и передавай их ! а имена констант сделай такими, чтобы они не совпадали с именами "передаваемых" переменных


Cabrera   (2004-08-06 14:27:00) [5]

Ну так мне надо передать в Button2Click numDiapBegin5,  numDiapEnd5, numDiapBegin10, numDiapEnd10, numDiapBegin20,   numDiapEnd20 из Button1Click. Как это сделать я не знаю......


Cabrera   (2004-08-06 14:26:00) [6]

Ну так мне надо передать в Button2Click numDiapBegin5,  numDiapEnd5, numDiapBegin10, numDiapEnd10, numDiapBegin20,   numDiapEnd20 из Button1Click. Как это сделать я не знаю......


Digitman   (2004-08-06 13:56:00) [7]

ой-ой-ой !!!
что за бред  !!!
какого ляда имена идентификаторов у тебя совпадают !?

есть переменная с именем numDiapBegin5 и есть константа с тем же именем ... и сплошь и рядом эти неоднозначности ! ... вот и результат налицо !


Cabrera   (2004-08-06 13:48:00) [8]


...
   procedure Button1Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 CardsLoad: TCardsLoad;
 numDiapBegin5, numDiapEnd5, numDiapBegin10, numDiapEnd10, numDiapBegin20, numDiapEnd20, numDiller, skidkaDiller, numCards5, numCards10, numCards20: integer;
 cardPrice5, cardPrice10, cardPrice20, totalPrice5, otalPrice10, totalPrice20, totalPrice: real;
 diap5, diap10, diap20: TCardsNumSet;
 IsCross: boolean;

implementation

uses DataModule;

{$R *.dfm}

procedure TCardsLoad.Button1Click(Sender: TObject);
begin
  IF (Length(numfirst5.text) = 0) OR (Length(numlast5.text) = 0) OR (Length(numfirst10.text) = 0) OR (Length(numlast10.text) = 0) OR (Length(numfirst20.text) = 0) OR (Length(numlast20.text) = 0 ) THEN
     begin
         Application.MessageBox(
              'Íå çàïîëåíû ïîëÿ íà÷àëüíî è êîíå÷íîãî çíà÷åíèÿ äèàïàçîíà êàðò - ââåäèòå çíà÷åíèÿ',
              'Open Error', MB_OK);
         IF (Length(numfirst5.text) = 0)THEN numfirst5.SetFocus
         ELSE IF (Length(numlast5.text) = 0) THEN numlast5.SetFocus  ELSE IF (Length(numfirst10.text) = 0) THEN numfirst10.SetFocus  ELSE IF (Length(numlast10.text) = 0) THEN numlast10.SetFocus  ELSE IF (Length(numfirst20.text) = 0) THEN numfirst20.SetFocus  ELSE IF (Length(numlast20.text) = 0) THEN numlast20.SetFocus;
    end;

   IF (StrToInt(numfirst5.Text) > StrToInt(numlast5.Text)) OR (StrToInt(numfirst10.Text) > StrToInt(numlast10.Text)) OR (StrToInt(numfirst20.Text) > StrToInt(numlast20.Text)) THEN
       Application.MessageBox(
            'Íåïðàâèëüíî ââåäåíû çíà÷åíèÿ äèàïàçîíà - íà÷àëüíîå çíà÷åíèå áîëüøå êîíå÷íîãî',
            'Open Error', MB_OK);

   numDiapBegin5 := StrToInt(numfirst5.Text);
   numDiapEnd5 := StrToInt(numlast5.Text);
   numDiapBegin10 := StrToInt(numfirst10.Text);
   numDiapEnd10 := StrToInt(numlast10.Text);
   numDiapBegin20 := StrToInt(numfirst20.Text);
   numDiapEnd20 := StrToInt(numlast20.Text);

   //óñòàíîâêà äèàïàçîíîâ
   diap5 := [numDiapBegin5..numDiapEnd5];
   diap10 := [numDiapBegin10..numDiapEnd10];
   diap20 := [numDiapBegin20..numDiapEnd20];

   IF (diap5 * diap10 []) OR (diap5 * diap20 []) OR (diap10 * diap20 [])
   THEN
      Application.MessageBox('Íå ïðàâèëüíî çàïîëíåíû äèàïàçîíû', 'Open Error', MB_OK);

   numDiller := StrToInt(DillersLookup.KeyValue);
   IF (DillersLookup.KeyValue = null) then
   Application.MessageBox(
       'Íå âûáðàí äèëåð',
       'Open Error', MB_OK);

    with InetCardsDataModule.UpdateCardsDillersSQL do
       begin
         with SQL do begin
            Clear;
            Add('UPDATE cards ');
            Add('SET numdiller = :numDiller ');
            Add('WHERE (id between :diapBegin5 AND :diapEnd5) ');
            Add('OR (id between :diapBegin10 AND :diapEnd10) ');
            Add('OR (id between :diapBegin20 AND :diapEnd20) ');
                end;
         Parameters.ParseSQL(SQL.Text, True);
          Parameters.ParamByName('numDiller').Value := numDiller;
Parameters.ParamByName('diapBegin5').Value := numDiapBegin5;
         Parameters.ParamByName('diapEnd5').Value := numDiapEnd5;
         Parameters.ParamByName('diapBegin10').Value := numDiapBegin10;
         Parameters.ParamByName('diapBegin20').Value := numDiapBegin20;
         Parameters.ParamByName('diapEnd10').Value := numDiapEnd10;
         Parameters.ParamByName('diapEnd20').Value := numDiapEnd20;
         try
            ExecSQL;
         except
            on E:Exception do ShowMessage(E.Message);
         end;
       end;
 end;

procedure TCardsLoad.Button2Click(Sender: TObject);
var
  MyDir : string;
begin
  MyDir := 'С:\MyDir';
// ðàñ÷åò äàííûõ äëÿ íàêëàäíîé
// çàïðîñ ñêèäêè
  IF (Length(dillersLookup.text) = 0)THEN
  begin
       Application.MessageBox(
          'Íå âûáðàí äèëëåð',
          'Open Error',
           MB_OKCANCEL + MB_DEFBUTTON1);
        dillersLookup.SetFocus;
  end
  ELSE
  begin
      try
        InetCardsDataModule.SkidkaSQL.SQL.Text:='select skidka from dillers where id=:numDiller';
        InetCardsDataModule.SkidkaSQL.Parameters.ParamByName('numDiller').Value:=DillersLookup.KeyValue;
        InetCardsDataModule.SkidkaSQL.Open;
        skidkaDiller:=InetCardsDataModule.SkidkaSQL.Fields[0].AsInteger;
        except
           on E:Exception do ShowMessage(E.Message);
        end;
    end;

// ÷èñëî êàðò
    numCards5 := numDiapEnd5 - numDiapBegin5;
    ShowMessage(IntToStr(numCards5));
    numCards10 := numDiapEnd10 - numDiapBegin10;
    numCards20 := numDiapEnd20 - numDiapBegin20;
// îáùàÿ ñòîèìîñòü = íîìèíàë äèàïàçîíà * êîëè÷åñòâî êàðò â äèàïàçîíå
    cardPrice5 := 150-150*skidkaDiller/100;
    cardPrice10 := 300-300*skidkaDiller/100;
    cardPrice20 := 600-600*skidkaDiller/100;
    totalPrice5 := numCards5 * cardPrice5;
    totalPrice10 := numCards10 * cardPrice10;
    totalPrice20 := numCards20 * cardPrice20;
    totalPrice := totalPrice5 + totalPrice10 + totalPrice20;

//excel дальше
 end;

end.


Digitman   (2004-08-06 13:38:00) [9]


> Cabrera   (06.08.04 13:25) [16]


чудес не бывает
и без полного кода проекта найти источник "чудес" нельзя


Ega23   (2004-08-06 13:28:00) [10]

Остаётся привести ВЕСЬ код юнита, а также код файла-проекта


Cabrera   (2004-08-06 13:25:00) [11]

Ну просто не понимаю в чем дело, добавила watch на все переменные, в Button1Click равны вводимым значениям, а Button2Click 0.
>>- значит в .. ты их обнуляешь...
Значит они как-то сами обнуляются, потому что видимо я их нигде вручную не обнуляю.


han_malign   (2004-08-06 13:11:00) [12]

> параметры Param1 и Param2 в Button2Click равны 0
- значит в ..ты их обнуляешь...

З.Ы. А вообще переменные с глобальной видимостью - дурной тон, если не хочешь делать их полями класса, то хотя бы под implementation убери(глобальная видимость для одного модуля)...


Ega23   (2004-08-06 13:11:00) [13]

C ними все нормально, Param1 и Param2 в Button1Click равны вводимым значениям, т.е. там 15, 10... т.д.

Должно быть всё в порядке. У тебя всё правильно написано.


Digitman   (2004-08-06 13:08:00) [14]

не вижу никаких проблем
разве что если форма создается более чем в одном экз-ре, и кнопки на этих экз-рах нажимаются как попало, а не в предполагаемой последовательности


Cabrera   (2004-08-06 13:06:00) [15]

2 Ega23 ©  

C ними все нормально, Param1 и Param2 в Button1Click равны вводимым значениям, т.е. там 15, 10... т.д.


Ega23   (2004-08-06 13:02:00) [16]

А чему равны edit1.text и edit2.text?


Cabrera   (2004-08-06 13:01:00) [17]

Суть проблемы:


   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
Param1, Param2, total: integer;

implementation

{$R *.dfm}

Procedure TSomeForm.Button1Click(Sender: TObject);
begin
Param1 := StrToInt(edit1.text);
Param2 := StrToInt(edit2.text);
..
Button2.Enabled := True;
end;

procedure TSomeForm.Button2Click(Sender: TObject);
begin
 
  total:=Param1+Param2;
  showmessage(inttostr(total));

end;


параметры Param1 и Param2 в Button2Click равны 0, и суммы выдается 0.


Digitman   (2004-08-06 12:41:00) [18]


> Cabrera   (06.08.04 12:32) [7]


проблемы-то какие ? с параметрами ? непонятно ... ты суть проблемы изложи - будет и рекомендация по ее преодолению ...


DK   (2004-08-06 12:40:00) [19]

А без передачи использовать эти переменные не получается?


Cabrera   (2004-08-06 12:32:00) [20]

В том-то и дело, что все эти переменные объявлены не в самих обработчиках, а в пазделе var(перед implementation)...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо