Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Передача параметров   Найти похожие ветки 

 
Cabrera   (2004-08-06 11:07) [0]

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


 
Sandman25 ©   (2004-08-06 11:08) [1]

Не надо так передавать параметры. Поподробнее расскажите, в чем задача.


 
Digitman ©   (2004-08-06 11:12) [2]


> вторая кнопка стала доступной только после нажатия первой


procedure TSomeForm.Button1Click(..);
begin
 FParam1 := 1;
 FParam2 := 2;
..
Button2.Enabled := True;
end;

procedure TSomeForm.Button2Click(..);
begin
 showmessage(inttostr(FParam1));
 showmessage(inttostr(FParam2));
end;


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

На форме есть несколько полей ввода. По нажатию первой кнопки, введенные значения считываются и соотвествующим образом обрабатываются. Происходят еще некоторые действия с БД. Далее, после того как эти манипуляции произведены, надо сделать доступной второую кнопку "Вывод результатов в Excel". По второй кнопке обработанные данные (считанные по нажатию первой кнопки) должны передавать в ячейки Excel.


 
Ega23 ©   (2004-08-06 11:15) [4]

1. Используй переменные с областью видимости на уровень выше твоих обработчиков.
2.
procedure TForm1.Buttom1Click(Sender : TObject);
begin
Button2.Enabled:=True;
end;


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

С кнопкой понятно, а с параметрами что делать?


 
DK   (2004-08-06 12:27) [6]

Ega23 © тебе же написал:

1. Используй переменные с областью видимости на уровень выше твоих обработчиков.


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

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


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

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


 
Digitman ©   (2004-08-06 12:41) [9]


> Cabrera   (06.08.04 12:32) [7]


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


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

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


   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.


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

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


 
Cabrera   (2004-08-06 13:06) [12]

2 Ega23 ©  

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


 
Digitman ©   (2004-08-06 13:08) [13]

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


 
han_malign ©   (2004-08-06 13:11) [14]

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

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


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

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

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


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

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


 
Ega23 ©   (2004-08-06 13:28) [17]

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


 
Digitman ©   (2004-08-06 13:38) [18]


> Cabrera   (06.08.04 13:25) [16]


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


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


...
   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("&#205;&#229; &#239;&#240;&#224;&#226;&#232;&#235;&#252;&#237;&#238; &#231;&#224;&#239;&#238;&#235;&#237;&#229;&#237;&#251; &#228;&#232;&#224;&#239;&#224;&#231;&#238;&#237;&#251;", "Open Error", MB_OK);

   numDiller := StrToInt(DillersLookup.KeyValue);
   IF (DillersLookup.KeyValue = null) then
   Application.MessageBox(
       "&#205;&#229; &#226;&#251;&#225;&#240;&#224;&#237; &#228;&#232;&#235;&#229;&#240;",
       "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";
// &#240;&#224;&#241;&#247;&#229;&#242; &#228;&#224;&#237;&#237;&#251;&#245; &#228;&#235;&#255; &#237;&#224;&#234;&#235;&#224;&#228;&#237;&#238;&#233;
// &#231;&#224;&#239;&#240;&#238;&#241; &#241;&#234;&#232;&#228;&#234;&#232;
  IF (Length(dillersLookup.text) = 0)THEN
  begin
       Application.MessageBox(
          "&#205;&#229; &#226;&#251;&#225;&#240;&#224;&#237; &#228;&#232;&#235;&#235;&#229;&#240;",
          "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;

// &#247;&#232;&#241;&#235;&#238; &#234;&#224;&#240;&#242;
    numCards5 := numDiapEnd5 - numDiapBegin5;
    ShowMessage(IntToStr(numCards5));
    numCards10 := numDiapEnd10 - numDiapBegin10;
    numCards20 := numDiapEnd20 - numDiapBegin20;
// &#238;&#225;&#249;&#224;&#255; &#241;&#242;&#238;&#232;&#236;&#238;&#241;&#242;&#252; = &#237;&#238;&#236;&#232;&#237;&#224;&#235; &#228;&#232;&#224;&#239;&#224;&#231;&#238;&#237;&#224; * &#234;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#234;&#224;&#240;&#242; &#226; &#228;&#232;&#224;&#239;&#224;&#231;&#238;&#237;&#229;
    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:56) [20]

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

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


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

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


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

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


 
Digitman ©   (2004-08-06 14:30) [23]

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


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

2 Digitman ©

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

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


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

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


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

> 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;



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.024 c
14-1091768892
Anatoly Podgoretsky
2004-08-06 09:08
2004.08.22
Пятничная на оптимизацию


1-1092147415
Alex870
2004-08-10 18:16
2004.08.22
TTreeView


1-1091620202
Anton777
2004-08-04 15:50
2004.08.22
Удаление файла при помощи реестра


1-1091591383
mixam
2004-08-04 07:49
2004.08.22
работа с файлами


1-1091768920
dennisius
2004-08-06 09:08
2004.08.22
QRStringsBand