Einzelnen Beitrag anzeigen

Doc F

Registriert seit: 28. Nov 2003
Ort: nähe Giessen
7 Beiträge
 
#22

Re: Gemeinsame OnClick - Behandlung

  Alt 7. Dez 2003, 00:16
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.
  Mit Zitat antworten Zitat