AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gemeinsame OnClick - Behandlung

Ein Thema von Doc F · begonnen am 4. Dez 2003 · letzter Beitrag vom 15. Dez 2003
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#21

Re: Gemeinsame OnClick - Behandlung

  Alt 5. Dez 2003, 12:16
@choose,
das hört sich ja langsam nach einem Beitag für die CodeLib an.



Zitat:
OK, [...] allerdings habe ich da auch meistens noch Code, der nicht bei allen Typen vorhanden ist, und das läßt sich ja leider nicht auf so eine Weise einbinden.
Mit diesem Satz meinte ich aber Code, der nicht mit dem Objekt selbst in Verbindung steht.

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.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
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
Doc F

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

Re: Gemeinsame OnClick - Behandlung

  Alt 7. Dez 2003, 00:19
Ups, sorry, meine Formatierungen sin im Nirwana verschwunden. Keine Absicht.

Doc F
Nicht jeder ist so egoistisch, das er sich selbst Gedanken macht.
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#24

Re: Gemeinsame OnClick - Behandlung

  Alt 7. Dez 2003, 17:58
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
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Doc F

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

Re: Gemeinsame OnClick - Behandlung

  Alt 8. Dez 2003, 20:55
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 ... )
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:
Type
  TProgramiere = MöchtegernHobbyProgrammierer(Class)
noch ne verständliche Antwort parat.

Danke

Doc F
Nicht jeder ist so egoistisch, das er sich selbst Gedanken macht.
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#26

Re: Gemeinsame OnClick - Behandlung

  Alt 9. Dez 2003, 20:12
Hallo,
Zitat von Doc F:
Delphi-Quellcode:
Type
  TProgramiere = MöchtegernHobbyProgrammierer(Class)
soll vermutlich
Delphi-Quellcode:
type
  TProgramierer = class(TMoechtegernHobbyProgrammierer)
bedeuten

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:
type
  TDataSetAppend = class(TDataSetInsert)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

implementation

procedure TDataSetAppend.ExecuteTarget(Target: TObject);
begin
  GetDataSet(Target).Append;
end;
Ich weiß nicht welche Erfahrungen Du bisher mit selbstgeschriebenen Komponenten hast.
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
Angehängte Dateien
Dateityp: zip actions.zip (1,1 KB, 6x aufgerufen)
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Doc F

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

Re: Gemeinsame OnClick - Behandlung

  Alt 9. Dez 2003, 20:36
Hallo mr2,

Super, jetzt wird programmiert, bis die (System-)Fetzen fliegen.

Ü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!!!
Nicht jeder ist so egoistisch, das er sich selbst Gedanken macht.
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#28

Re: Gemeinsame OnClick - Behandlung

  Alt 15. Dez 2003, 18:50
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 Hier im Forum suchenWelche Datenbank da findest Du jede Menge Antworten.

CU mr2
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz