![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметров
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)...