Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.051 c
4-1089534906
Aldor_
2004-07-11 12:35
2004.08.22
Цикл выборки сообщений в безоконном приложении


3-1090897936
mixam
2004-07-27 07:12
2004.08.22
delphi и 1с


14-1091816077
Денисыч
2004-08-06 22:14
2004.08.22
Вопрос про легальность Delphi


14-1091451567
Иксик
2004-08-02 16:59
2004.08.22
Образование на Украине для Иностранца.


3-1090749396
a3a3ello
2004-07-25 13:56
2004.08.22
InterBase -> Firebird





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский