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