![]() |
Re: Gemeinsame OnClick - Behandlung
@choose,
das hört sich ja langsam nach einem Beitag für die CodeLib an. Zitat:
z.B. wird mal eine Prozedur oder andere Codezeilen nur abgearbeitet, wenn das Ereignis von einem Button ausgelöst wird, aber nicht, wenn es von einer CheckBox kommt ... http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Gemeinsame OnClick - Behandlung
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 :shock: 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:
Ich hoffe, dieser lange Schrieb sprengt jetzt nicht das Forum.
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; Danke an alle für die Hilfe. Doc F [edit=Christian Seehase]Delphi-Tags korrigiert. Mfg, Christian Seehase[/edit] |
Re: Gemeinsame OnClick - Behandlung
Ups, sorry, meine Formatierungen sin im Nirwana verschwunden. Keine Absicht.
Doc F |
Re: Gemeinsame OnClick - Behandlung
Hallo,
ich glaube für Dein Problem sind Actions am besten geeignet. Einfach eine ActionList auf das Formular ziehen. Dann per Doppelclick auf die ActionList den ListEditor öffnen und über den kleinen schwarzen Pfeil links oben eine neue Standardaktion einfügen. Jetz nach unten scrollen und unter der Rubrik DataSet TDataSetFirst, TDataSetNext etc. auswählen. In der Action kannst Du dann einstellen für welche DataSource die Action zuständig ist. Anschließend einfach dem oder den entsprechenden Button(s) die Action als Action zuweisen. Und schon hast Du erreicht was Du wolltest und das ohne eine Zeile Code zu schreiben. mr2 |
Re: Gemeinsame OnClick - Behandlung
Hallo mr2,
Prima, danke für den Tipp, funzt ja prima. Na ja, wenigstens hab ich bei meinem Versuchen einiges gelernt. Jetzt nur noch eine Frage (hoffe ich): Da gibt es zwar Aktion DatSetInsert, aber nix für append. (Hät ich aber gerne ... :wall: ) Und ausserdem funzt des zwar für für Datenbanke, aber nicht zB. für meinen momentan auf Eis gelegt Audio-Player. Kann ich da irgendwie Standarteinträge selbst erzeugen ? Hab mich schon drin versucht, mir ist aber noch nicht so ganz klar, was ich dazu alles brauch. (Nebenbei bemerkt, Objektvererbung is schon toll, sonst müsste man das ja kpl. neu schreiben). Vielleicht hat da jemand für eine vom
Delphi-Quellcode:
noch ne verständliche Antwort parat.
Type
TProgramiere = MöchtegernHobbyProgrammierer(Class) Danke Doc F |
Re: Gemeinsame OnClick - Behandlung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:
Delphi-Quellcode:
bedeuten :lol:
type
TProgramierer = class(TMoechtegernHobbyProgrammierer) Aber nun zu Deinem eigentlichen Problem. Insert und Append sind prinzipiell identisch und führen nur bei Paradox oder ähnlich veralteten Datenbanken zu unterschiedlichen Ergebnissen. Du kannst natürlich trotzdem Deine eigene ActionKlasse schreiben:
Delphi-Quellcode:
Ich weiß nicht welche Erfahrungen Du bisher mit selbstgeschriebenen Komponenten hast.
type
TDataSetAppend = class(TDataSetInsert) public procedure ExecuteTarget(Target: TObject); override; end; implementation procedure TDataSetAppend.ExecuteTarget(Target: TObject); begin GetDataSet(Target).Append; end; Jedenfalls muss die Action in Delphi registriert werden. Im Anhang siehst Du wie das am besten gemacht wird (Datei U_MyActionsReg.pas). Das Beispiel ist für Delphi 6 und muss für Versionen darunter vermutlich angepass werden. Einfach die Datei MyActions.dpk in Delphi öffnen und die Schaltfläche "Installieren" betätigen. Weitere Hilfe findest Du auch in der Delphi-Hilfe unter "Komponentenentwicklung". Viel Erfolg. mr2 |
Re: Gemeinsame OnClick - Behandlung
Hallo mr2,
Super, jetzt wird programmiert, bis die (System-)Fetzen fliegen. :party: Übrigens hattest du recht mit Paradox, aber irgendwo muß man ja anfangen. Und da ich keine Client-Server-Datenbanken zu schreiben gedenke, sondern einfach nur 'just for fun' oder zum eigenen Bedarf Programme schreibe, reicht das ja (für den Anfang). Welche Datenbank würdet ihr den für den Hausgebrauch empfehlen ? Danke Doc F PS. Hab meinem PC mal ne neue Tastatur gegönnt, die vielen fehlenden Buchstaben sind ja schon peinlich. Merke: Tastatur + Cola = Autsch!!! |
Re: Gemeinsame OnClick - Behandlung
Hallo,
also was die Datenbank angeht, habe ich mit Access (per ADO) angefangen, um später auf Interbase, Oracle & MS SQL-Server zu wechseln. Interbase & die MSDE (das ist die Light-Version des SQL-Servers) kann man problemlos auf dem eigenen Rechner installieren - bei Oracle ist das etwas komplizierter :) Aber such' doch mal im Forum nach ![]() CU mr2 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz