Entwickler-Ecke

Sonstiges (Delphi) - ShowMessage wird 2mal angezeigt


FiceGoesDelphi - Di 22.01.08 16:28
Titel: ShowMessage wird 2mal angezeigt
Ich habs momentan mit ErrorBoxEx aber dort ist das gleiche Problem wie bei Showmessage.
Es geht hier um eine CheckBox. Wenn ich die Clicke soll folgende Überprüfung ablaufen und dementsprechend gehandelt werden. Ist ja alles soweit nicht kompliziert. Aber warum die ErrorBox bzw das ShowMessage 2mal auf geht, versteh ich nicht!



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TfrmHistoryCleaner.m_cbDataPlayerClick( Sender: TObject );
   begin
      if m_chkRPCExport.Checked then begin
         ErrorBoxEx( WindowHandle, 'Error''You can only activate Dataplayer Files, when RPC Export is not activated.');
         m_cbDataPlayer.Checked := False;
      end else begin
         m_btnImport.Enabled := not m_cbDataPlayer.Checked;
         m_dtpEndDate.Enabled := not m_cbDataPlayer.Checked;
         m_edDataPlayerAttrName.Enabled := m_cbDataPlayer.Checked;
      end;

   end;


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


dummzeuch - Di 22.01.08 18:14
Titel: Re: ShowMessage wird 2mal angezeigt
user profile iconFiceGoesDelphi hat folgendes geschrieben:
Ich habs momentan mit ErrorBoxEx aber dort ist das gleiche Problem wie bei Showmessage.
Es geht hier um eine CheckBox. Wenn ich die Clicke soll folgende Überprüfung ablaufen und dementsprechend gehandelt werden. Ist ja alles soweit nicht kompliziert. Aber warum die ErrorBox bzw das ShowMessage 2mal auf geht, versteh ich nicht!



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TfrmHistoryCleaner.m_cbDataPlayerClick( Sender: TObject );
   begin
      if m_chkRPCExport.Checked then begin
         ErrorBoxEx( WindowHandle, 'Error''You can only activate Dataplayer Files, when RPC Export is not activated.');
         m_cbDataPlayer.Checked := False;
      end else begin
         m_btnImport.Enabled := not m_cbDataPlayer.Checked;
         m_dtpEndDate.Enabled := not m_cbDataPlayer.Checked;
         m_edDataPlayerAttrName.Enabled := m_cbDataPlayer.Checked;
      end;

   end;


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


Das liegt daran, dass ein Aendern der Checked-Property nochmal einen OnClick Event ausloest.

Wenn Du stattdessen diese Funktion aufrufst ...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TCheckBox = class(TCustomCheckBox)
  end;

procedure TCheckBox_SetCheckedNoOnClick(_Chk: TCustomCheckBox; _Checked: boolean);
var
  Chk: TCheckBox;
begin
  Chk := TCheckBox(_Chk);
  Chk.ClicksDisabled := true;
  try
    Chk.Checked := _Checked;
  finally
    Chk.ClicksDisabled := false;
  end;
end;


... passiert das nicht mehr.

twm