Возникли проблемы с Delphi, если заявления - PullRequest
0 голосов
/ 29 января 2011

Примечание: не редактируйте макет этого кода! (См. Ответ ниже по причине)

procedure TForm1.ReadCardTimer(Sender: TObject);
begin
ReadCard2(StrToInt(PChar('$' + Form2.Edit1.Text)),1);
ReadCard2(StrToInt(PChar('$' + Form2.Edit3.Text)),2);
ReadCard2(StrToInt(PChar('$' + Form2.Edit2.Text)),3);
ReadCard2(StrToInt(PChar('$' + Form2.Edit4.Text)),4);
ReadCard2(StrToInt(PChar('$' + Form2.Edit5.Text)),5);
ReadCard2(StrToInt(PChar('$' + Form2.Edit6.Text)),6);
ReadCard2(StrToInt(PChar('$' + Form2.Edit7.Text)),7);
ReadCard2(StrToInt(PChar('$' + Form2.Edit8.Text)),8);
ReadCard2(StrToInt(PChar('$' + Form2.Edit9.Text)),9);
ReadCard2(StrToInt(PChar('$' + Form2.Edit10.Text)),10);
ReadCard2(StrToInt(PChar('$' + Form2.Edit11.Text)),11);
ReadCard2(StrToInt(PChar('$' + Form2.Edit12.Text)),12);
ReadCard2(StrToInt(PChar('$' + Form2.Edit13.Text)),13);
ReadCard2(StrToInt(PChar('$' + Form2.Edit14.Text)),14);
if NewValue = 0 then
Image1.Hide;
Image2.Hide;
if NewValue > 0 then
Image1.Show;
Image2.Show;
UpdateCardImage(NewValue,NewValue2,'Image1');
UpdateCardImage(NewValue3,NewValue4,'Image2');
UpdateCardImage(NewValue5,NewValue6,'Image3');
UpdateCardImage(NewValue7,NewValue8,'Image4');
UpdateCardImage(NewValue9,NewValue10,'Image5');
UpdateCardImage(NewValue11,NewValue12,'Image6');
UpdateCardImage(NewValue13,NewValue14,'Image7');
end;

По какой-то причине второе изображение, которое я пытаюсь скрыть ... не спрятать ... Я могу закомментировать первое, а второе скрыть, что здесь происходит?

Ответы [ 4 ]

14 голосов
/ 29 января 2011

Я отступил в вашем коде, чтобы отразить значение операторов if.Надеюсь, теперь вам будет ясно, что происходит.Я рекомендую вам начать делать отступы своего кода самостоятельно!

procedure TForm1.ReadCardTimer(Sender: TObject);
begin
    ReadCard2(StrToInt(PChar('$' + Form2.Edit1.Text)),1);
    //etc.
    if NewValue = 0 then
        Image1.Hide;
    Image2.Hide;
    if NewValue > 0 then
        Image1.Show;
    Image2.Show;
    UpdateCardImage(NewValue,NewValue2,'Image1');
    //etc.
end;

Предположительно, что вы имеете в виду:

    if NewValue = 0 then
    begin
      Image1.Hide;
      Image2.Hide;
    end;
    if NewValue > 0 then
    begin
      Image1.Show;
      Image2.Show;
    end;

Но, если предположить, что NewValue никогда не бывает отрицательным, то я бы использовалСвойство Visible, которое является сокращением для Show / Hide:

Image1.Visible := NewValue>0;
Image2.Visible := Image1.Visible;

Этот декларативный подход обычно приводит к более ясному и более выразительному коду.Кроме того, он позволяет кратко выразить тот факт, что видимость этих элементов управления связана вместе.

5 голосов
/ 29 января 2011

Вам нужно будет использовать

begin
  Image1.Show;
  Image2.Show;
end;

begin и end сообщают компилятору, что операторы принадлежат друг другу. В вашем коде всегда отображается второе, а первое отображается только тогда, когда выражение if возвращает True.

1 голос
/ 30 января 2011

Вот почему вы должны использовать форматировщик кода. Это позволило бы легко определить проблему.

1 голос
/ 30 января 2011

Почему вы используете PChar ()?Там не нужно.

...