Кнопка переключения флажка: Активируйте TADOQuery при проверке изображения

#delphi

Вопрос:

Я делаю toggle switch то , что, когда я нажимаю на него , он меняет свое On/off состояние, я создал его, переопределив Paint метод TCanvas , все в порядке, но границы выглядели неровными.

Поэтому я изменил компонент, чтобы загружать изображение для каждого состояния в зависимости от состояния изображения, короче говоря, я помещаю TImage компонент внутри Checkbox унаследованного от TwwCheckbox

Но когда изображение будет нажата/нажата/выбрана, Checked меняет свое состояние в true, но он не показывает то состояние, которое было сохранено в базе данных в следующий раз, когда я снова откройте форму, я имею в виду, если я запускаю toggle его сохраняется С S и при открытии формы, в которой Toggle он должен быть включен и не выключен

 {here I create the toggle in runtime and assign it a datasource
to connect it to the database}
procedure TForm1.FormCreate(Sender: TObject); 
begin    
   ToggleButton:= TinToggleButton2.Create(Self);    
   ToggleButton.Name := 'ToggleButton';    
   ToggleButton.Parent:= Self;    
   ToggleButton.Left:= 200;    
   ToggleButton.Top:=100;    
   ToggleButton.Visible:= true;    
   ToggleButton.ValueChecked:= 'S';    
   ToggleButton.ValueUnchecked:= 'N';    
   ToggleButton.DisplayValueChecked:= 'S';    
   ToggleButton.DisplayValueUnchecked:= 'N';    
   ToggleButton.DataField:= 'TAutoSave';    
   ToggleButton.DataSource:= dsToggleButton;    
   ToggleButton.DataSource.DataSet:= qryToggleButton; 
end;

//here the query 
procedure TForm1.Button1Click(Sender: TObject);
begin
  qryToggleButton.Active:= true;
end;

//i send the data to database
procedure TForm1.Button2Click(Sender: TObject);
begin
  qryToggleButton.Post;
end;

{here I create the component in another unit where the click event is
to switch between image}
constructor TinToggleButton2.Create(AOwner: TComponent);
begin
  inherited;
  Width:= 34;
  Height:= 15;
  Image:= TImage.Create(Self);
  Image.Visible:= true;
  Image.Picture.LoadFromFile('toggle_Toggle1.ico');
  Image.Parent:= Self;
  Image.OnClick:=Self.Image1Click;
  Self.Checked:= false;
 Checked:= false;
end;

procedure TinToggleButton2.Image1Click(Sender: TObject);
begin
   if DataSource <> nil then
    begin
      DataSource.Edit;
      if Self.Checked then
        begin
           Self.Checked:= false;
           DataSource.DataSet.FieldByName(DataField).Value:= ValueUnchecked;
           Image.Picture.LoadFromFile('toggle_Toggle1.ico');
        end
   else
      begin
         Self.Checked:= true;
         DataSource.DataSet.FieldByName(DataField).Value:= ValueChecked;
         Image.Picture.LoadFromFile('toggle_Toggle2.ico');
      end;
  end;
end;
 

Я создаю переключатель во время выполнения, но я помещаю другие компоненты, такие как TwwDataSource «и TADOQuery «, в форму и устанавливаю DataField DataSource флажок «и».

Комментарии:

1. FillPath, SolidBrush-это в основном просто методы GDI из api win 32, поэтому в Delphi были бы эквиваленты, если бы вы, скорее всего, не могли напрямую вызвать api

2. Используя Delphi, класс TCanvas реализует GDI. Графические компоненты имеют свойство Canvas, которое вы можете использовать в своей программе рисования.

3. Вы переводите набор данных в режим редактирования или вставки, вызывая его Edit или Insert методы, а не вызывая Open . Сначала его нужно открыть, а затем либо отредактировать, либо вставить новую строку. Вы не можете позвонить Post , если вы сначала не позвонили или Edit или Insert , и должны звонить только Post в том случае, если данные действительно были изменены.

4. @KenWhite да , но компонент вставляется edit state каждый раз, когда я меняю checkbox , то, что я сделал, было if DataSource <> nil then DataSource.Edit и в Checked нем DataSource.DataSet.FieldByName(DataField).Value:= ValueUnchecked , и это работает