Einzelnen Beitrag anzeigen

Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#5
  Alt 7. Jan 2003, 01:29
Hallo Sakura,

ich habe mein oben beschriebenes Problem lösen können. Auf einer Delphi-Seite habe ich im Zusammenhang mit CheckBox eine Befehlsfolge der Art:

SendMessage(handle, BM_GETCHECK, ....); gefunden. Über Hilfetexte war dann der Weg zu BM_SETCHECK nicht mehr sehr weit. Ich bin zwar noch ein Stückchen weit weg davon, alle komplett zu verstehen, aber der Anfang ist gemacht.

Für den Fall, daß ein anderer Suchender ein ähnliches Problem hat, hänge ich die funktionsfähige Lösung mal noch hinten an.

Delphi-Quellcode:
{ beim Wechsel der Adreßdatei müssen die ZusatzKriterien aus TabAdrZK
  für die jeweilige Adresse (aus bereits geöffneter DB TabAdr) geladen werden;
  für Testzwecke über einen SpeedButton realisiert }

procedure TFKasse.sbLoadAdrZKClick(Sender: TObject);
var
  adrid : integer;
  handle : HWND;
  bValue : boolean;
  s, sValue : string;
begin
  if pcAdr1.ActivePage = tsZK then begin
    sbClrZKClick(Sender);
    UP_DBActiv(TabAdrZK, SessN, DataPath, fnAdrZK);
    adrid := TabAdr.FieldByName('AdrID').AsInteger;
    SetFilter(TabAdrZK, 'AdrID='+IntToStr(adrid));
    TabAdrZK.First;
    while not TabAdrZK.Eof do begin
      { Name einer geänderten Komponente aus DB holen;
        wurde für die akt. Adresse aus TabAdr bei Änderung
        gespeichert sollte keine Änderung durch Nutzer
        vorgenommen worden sein, steht
        der Name der Komponente auch nicht in TabAdrZK }

      //cb steht sowohl für CheckBox als auch ComboBox
      s := TabAdrZK.FieldByName('cbName').AsString;
      if (gbEinzel.FindComponent(s) is TCheckBox) then begin
        bValue := TabAdrZK.FieldByName('Checked').AsBoolean;
        handle := TCheckBox(gbEinzel.FindComponent(s)).Handle;
        SendMessage(handle, BM_SETCHECK, Integer(bValue), 0);
      end;
      if (gbGruppen.FindComponent(s) is TComboBox) then begin
        sValue:= (TabAdrZK.FieldByName('Text').AsString);
        handle := TComboBox(gbGruppen.FindComponent(s)).Handle;
        SendMessage(handle, WM_SETTEXT, 0, integer((sValue)));
      end;
      TabAdrZK.Next;
    end;
  end;
end;
Zur Vervollständigung noch die Prozedur zum Löschen der Werte, wenn
von einem Datensatz zum nächsten gewechselt wird:

Delphi-Quellcode:
procedure TFKasse.sbClrZKClick(Sender: TObject);
var
  i : integer;
  Handle : HWND;
  s, sValue : string;
begin
  for i := 0 to gbEinzel.ComponentCount-1 do begin
    s := gbEinzel.Components[i].Name;
    if (gbEinzel.FindComponent(s) is TCheckBox) then begin
      Handle := TCheckBox(gbEinzel.FindComponent(s)).Handle;
      SendMessage(Handle, BM_SETCHECK, Integer(false), 0);
    end;
  end;

  for i := 0 to gbGruppen.ComponentCount-1 do begin
    s := gbGruppen.Components[i].Name;
    if (gbGruppen.FindComponent(s) is TComboBox) then begin
      sValue := '';
      Handle := TCheckBox(gbGruppen.FindComponent(s)).Handle;
      SendMessage(Handle, WM_SETTEXT, 0, integer((sValue)));
    end;
  end;
end;
Vielleicht nützt ja eine meiner Programmzeilen mal jemand anderen, Probleme zu lösen.

8) I'am happy!!
so long
eddy
  Mit Zitat antworten Zitat