Hi, Leute,
hier fühl ich mich wohl, ihr seid lustig !
Sorry, das ich mich jetzt erst wieder melde, hab flach gelegen.
Hier stehen ja wirklich viel tolle Sachen die einem Anregungen liefern, aber im Prinzip trifft alles nicht das, was ich eigentlich wollte, nämlich mit einem Button-Click
div. andere Buttons steuern. Nehmen wir als Beispiel mal den DBNavigator, den ich nicht mag. Oder zwei identische Buttonleisten, die zwei verschieden Audioquellen steuern sollen.
Ich hab mich gerade ein wenig in Datenbanken eingearbeitet, und brauchte zwei DBNavigatoren.
Wie gestagt, die sind blöd, denn ich bin Designfreak und wollte es mir vorbehalten, wohin ich welchen Button setzte. Schön und gut, ist ja kein Problem und am Anfang hab ich auch erst mal schön für jeden Button seine eigen OnClick-Routine geschrieben und Ruck-Zuck ein ellenlangen QuälText

gehabt, der meinen Augen fürchterlich missfiel und ausserdem schrecklich unübersichtlich war, deswegen meine Frage mit der einen (Na ja, bei mir sind schlussendlich dann vier geworden, der Übersichtlickkeit halber) Event-Routine.
Hier nun meine Lösung zur Diskussion (wie schon vorher geschrieben, waren gleich am Anfang von diesem Forumsbeitrag ein paar gutte Tips dabei):
Delphi-Quellcode:
const
// NavButton enabled Status
nbNextLast = 3; // binär 1100
nbNewDel = 6; // " 0110
nbStoreCancel = 9; // " 1001
nbFirstPrior = 12; // " 0011
nbNoBtn = 15; // " 1111
NavBtnNames : Array[1..8] of ShortString =
('BtnFirst', 'BtnPrior', 'BtnNext', 'BtnLast', 'BtnNew',
'BtnStore', 'BtnCancel', 'BtnDel');
procedure TForm2.NavBtnClick(Sender: TObject);
var
BtnAction, BtnID : String;
BtnNr, NavGroup : Integer;
begin
BtnAction := TSpeedButton(Sender).Hint;
BtnID := IntToStr(TSpeedButton(Sender).Tag);
NavGroup := StrToInt(BtnID[1]);
BtnNr := StrToInt(BtnID[2]);
case BtnNr of
1 : SetNavBtn(NavGroup, nbFirstPrior, BtnNr);
2..3 : SetNavBtn(NavGroup, nbNoBtn, BtnNr);
4 : SetNavBtn(NavGroup, nbNextLast, BtnNr);
5 : SetNavBtn(NavGroup, nbNewDel, BtnNr);
6..8 : SetNavBtn(NavGroup, nbStoreCancel, BtnNr);
end;
DoBtnAction(NavGroup, BtnNr);
end;
function TForm2.GetComponentID(CoName : String) : Integer; // <-- Worum's mir eigentlich ging
var
comp : TComponent;
begin
comp := TComponent(FindComponent(CoName));
result := comp.ComponentIndex;
end;
procedure TForm2.SetNavBtn(NavGroup, BtnState, BtnNr : Integer);
var
comp : TComponent;
compId, mask, i : Integer;
begin
case BtnNr of
1..4 : begin
for i := 0 To 3 do
begin
compID := GetComponentID(NavBtnNames[i+1] +
IntToStr(NavGroup));
mask := 1 shl i;
TSpeedButton(Components[compID]).enabled :=
(BtnState AND mask) = mask;
end;
end;
5..6 : begin
for i := 0 To 3 do
begin
compID := GetComponentID(NavBtnNames[i+5] +
IntToStr(NavGroup));
mask := 1 shl i;
TSpeedButton(Components[compID]).enabled :=
(BtnState AND mask) = mask;
end;
end;
end;
if NavGroup = 1 then SetNavBtn(2, nbFirstPrior, 1);
end;
procedure TForm2.DoBtnAction(NavGroup, BtnNr : Integer);
begin
case NavGroup of
1 : ..
// Anweisungsblock
end;
end;
Ich hoffe, dieser lange Schrieb sprengt jetzt nicht das Forum.
Danke an alle für die Hilfe.
Doc F
[edit=Christian Seehase]Delphi-Tags korrigiert. Mfg, Christian Seehase[/edit]
Nicht jeder ist so egoistisch, das er sich selbst Gedanken macht.