Форум: "Основная";
Текущий архив: 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("Íå ïðàâèëüíî çàïîëíåíû äèàïàçîíû", "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: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