![]() |
Button1Click(Sender:Tobject) direkt ohne Mausklick aufrufen
Hallo, DP!
Mit der objektiorientierten Programierung bin ich noch nicht fit. Daher meine Frage: Ich habe eine Procedur wie z. B. Procedure TForm1.Button1Click(Sender: TObject); Wie kann ich die Procedure OHNE Mausklick aufrufen. (Natürlich ohne die unter Button1 befindlichen Aktionen wie z.B. in Form1.Create o. ä. nochmals einzufügen, was den Code unnötig aufblähen würde.) Danke für Eure Mühe. |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Das wäre der falsche Weg. Wenn, dann lege dir eine Methode an welche den Code vom Button1 Click enthält und rufe diese im Button1Click() auf und auch an der Stelle wo du nun diesen Code nochmals brauchst.
Eine Hilfe wie du dies Ereignis nochmal aufrufst ohne das das Event vorhanden ist, würde dir was falsches lehren. |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Delphi-Quellcode:
procedure TForm1.FormCreate (Sender: TObject);
begin Button1Click(nil); //oder Button1Click(Form1); //oder Button1Click(Sender); end; |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
hmmm....
Delphi-Quellcode:
begin
Button1Click(NIL); // oder auch self end; |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
Frank :gruebel: |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Weil das nunmal Ereignis-Behandlungroutinen sind, welche ein Ereignis behandeln sollen. Wenn er das nun aber so aufrufen will, liegt kein Ereignis vor. Das macht zum einen den Quelltext unlesbarer und verwischt die Strukturen. Wenn, dann soll er das Eregnis erneut auslösen!
Siehe hier:
Delphi-Quellcode:
Aber nicht Ereignisroutinen falsch missbrauchen.
Button1.Click;
Wenn ein Code an 2 Stellen gebraucht wird, dann baut man sich eine Methode oder Procedure und ruft diese dann von den 2 Stellen auf. Vor allem gewährt das eine grundlegenden Anfang für die ordentliche Trennung von Oberfläche und Funktion. |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Mensch, Ihr seit aber schnell!
Herzlichen Dank an Alle. Ich habe ja kaum meine Frage abgesendet und schon Antworten! @Muetze1: Sorry Muetze1, damit komme ich nicht klar. OOP noch nicht mein Ding. @Kroko1999: Genial, das ist es. Und so einfach. Super! @Maravik: Danke, bestens. Mit Euch bin ich wieder ein Stück weiter.. CU! :lol: |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
|
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Also ich bin der Meinung das man Ereignisroutinen auch direkt aufrufen können soll.
Wenn meine Ereignisroutine wie folgt aussieht
Delphi-Quellcode:
wäre es doch Irsinn und Performanceverschwendung eine weitere Methode zu schreiben die zu 100% genau so aussieht um den Aufruf in der Ereignisroutine nur weiterzuleiten.
procedure TMyObject.MyEventProc(Sender: TObject);
begin if (Sender = Object1) then begin end else if (Sender = Object2 then begin end; end; |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Wieso Resourcenverschwendung? Es ist viel besser wiedervendbarer und leichter zu durchschauen.
Schon allein als ein Argument: Wenn du es in einer extra Methode implementierst ist es für spätere Anwendungen einfacher und viel leichter (bzw. wohl überhaupt möglich) diese virtuell zu markieren und somit bei Ableitungen überschreibbar zu machen. Ereignisbehandlungsroutinen dürfen bzw. sollten nicht virtuell oder dynamisch sein, afair. |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
vor allem wenn du 2 mal der fast gleiche code drinne hast, fragt sich jeder andere der des programm lesen muss am anfang erst mal was das soll... |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
Ich fühl mich mehr als unverstanden hier... Naja, macht doch was ihr wollt, es hat eh keinen Zweck hier... |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Ach Quatsch...
Nun wollen wir doch mal die Kirche im Dorf lassen.... Ich will doch für meinen Source-Code keinen Preis gewinnen, sondern Geld mit dem fertigen Produkt verdienen... Da ist dem Anwender doch egal wie es intern aussieht... Außerdem...: Es sei den ich irre mich... Erzeugt ein Button2.Click ja lediglich einen Event in der MessageQue der erst beim nächsten Idle, Application.Processmessages oder Rücksprung in die Verarbeitungsschleife, verarbeitet wird. Somit bin ich nicht sichern, ob die Aktion überhaupt zum richtigen Zeipunkt aufgerufen wird... Beispiel:
Delphi-Quellcode:
Funktioniert NICHT!
begin
Button1.Click; // Der Button hat X neu belegt... if x=y then .... end;
Delphi-Quellcode:
FUNKTIONIERT!!!
begin
Button1Click(self); // Der Button hat X neu belegt... if x=y then .... end; Frank :coder: (so das musste raus! Sorry) |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Ich hatte es oben geschrieben, dass man das Ereignis auch erneut auslösen kann durch Aufruf der Click Methode. Wann dies zeitlich geschieht, habe ich nirgends geschrieben. Das war mit ein Grund, warum ich diese Lösung nicht gleich in meinem aller ersten Code gepostet hatte.
Und solche Abläufe wie du es gerade geschrieben hast, fördern wieder den Ruf nach einer eigenständigen Methode auf die von 2 Stellen verzweigt wird. Ausserdem kommt es sehr wohl auf den Code in einem Programm an. Zum einen ist Spaghetti Code wirklich schlecht pfleg- und wartbar und zum anderen gibt es immer wieder Fälle wo doch mal andere mit dem Quellcode weiter arbeiten müssen. Da du dann das Wissen hast wo was, wie und weshalb aufgerufen wird, ist Klasse - aber das hilft keinem anderen. Ausserdem sollte man auch im Kopf behalten, dass es bei vielen Aufträgen eine Mitgabe der Quellen zur weiteren Pflege und Fortentwicklung mit im Auftrag enthalten ist. Zum Teil auch nur auf Grund von Sicherheitsaspekten. Ausser mquadrat hat hier anscheinend noch keiner den Sinn dahinter verstanden oder weiss was es bedeutet. |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
|
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
|
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Hallo Leute,
ich weiss, dass Objekte um neue Eigenschaften erweitert/verändert werden können. In meinem Fall ist der exakt gleiche Code aufzurufen, wenn das Programm vom Anwender als "unsichtbar" gewünscht wird. In dem Fall rufe ich Button1.click(NIL) auf. und es funktioniert! Ich spare mir: Viel Zeit, weil ich in 2 Minuten die Lösung hatte, Aufgeblähten Code, weil ich nicht die Choose in eine einfache Procedur/Function stecken musste und ich kann weiterarbeiten, weil ich nicht OOP lernen muss. Es gibt keine Probleme, da der betreffende Button nicht sichtbar ist. @Muetze1 Vielen Dank für Deine Mühe. Der User kann Button1.click nicht aufrufen. Das Programm ist unsichtbar. Nur in diesem Modus wird der Button1.Click "simuliert". Somit kann es "Probleme" bei der Ausführung des Programmes und bei möglichen Zugriffen auf Variablen/Dateien/Eigenschaften/Methoden von Objekten etc. nicht geben. Ich kann Dir leider nicht nicht weiter folgen, da mir das Wissen dazu fehlt. Aber ich denke statt "Scharmützel" solle es nachvollziehbare Beispiele geben, die auch wir als Anfänger verstehen. Go2EITS |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
Zitat:
Es tut nicht weh und ist kein Nachteil OOP zu lernen - und hier auch gar nicht im Detail von nöten! Die Sichtbarkeit des Buttons ist hierbei unerheblich. Zitat:
Delphi-Quellcode:
aufrufst einfach
Button1Click(nil);
Delphi-Quellcode:
als Alternative schreiben. Was sollte das mit dem User zu tun haben?
Button1.Click;
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Ok, und davon rede ich:
Procedure TForm1.Button1Click(Sender: TObject);
Begin ... viel Code End; Procedure TForm1.AndereMethode; Begin irgendwelcher Code Button1Click(Nil); End;
Delphi-Quellcode:
Wenn du nun noch dem "MachWas" einen beschreibenden (aber nicht ausufernden) Namen verpasst, dann weisst du auch später sofort was der macht.
Procedure TForm1.Button1Click(Sender: TObject);
Begin MachWas; End; Procedure TForm1.AndereMethode; Begin irgendwelcher Code MachWas; End; Procedure TForm1.MachWas; Begin ... viel Code End; |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
@Mutze1
Vielen Dank für Deine ausführlichen Ausführungen. Ich habe nicht gescheckt, dass ich eine Procedure wie procedure TForm1.Button8Click(Sender: TObject); mit Button8.Click aufrufen kann. Aber darauf muss man erst mal kommen. :gruebel: Ich glaube JETZT habe ich es verstanden: Procedure TForm1.MachWas; Begin ... viel Code End; wird von der TForm1.Button8Click(Sender: TObject) aufgerufen oder von Code in z. B. von TForm1.Irgendwasanderes aufgerufen. Damit wird der Code nicht doppelt angelegt und "sauber" programmiert. Danke!!! :hi: |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Zitat:
Richtig. So habe ich es damals in der Schule übrigens auch gelernt... |
Re: Button1Click(Sender:Tobject) direkt ohne Mausklick aufru
Na dann bin ich ja froh, das wir doch noch zu einem guten Ende gekommen sind, womit alle zufrieden sind.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz