AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Selbe Procedur mit Button und MenuItem ansprechen?
Thema durchsuchen
Ansicht
Themen-Optionen

Selbe Procedur mit Button und MenuItem ansprechen?

Ein Thema von new32 · begonnen am 21. Apr 2006 · letzter Beitrag vom 21. Apr 2006
Antwort Antwort
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#1

Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 15:08
Ich habe ein Programm geschrieben, in dem ich eine Procedur
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender:TObject);
begin
... //Sender wird NICHT verwendet!
end;
sowohl duch einen Button erreichbar machen möchte, alsauch durch ein MenuItem.

Also habe ich die oben in Umrissen dargestellte Funktion geschreiben(ursprünglich nur für den Button) und im Objektinpector das OnClick Ereignis des MenuItems auf Button1Click gestellt.

Die funktion wird zwar angesprochen aber irgendwie funktioniert der Aufruf einer Funktion in einer dll(in C geschrieben), die nen Thread aufruft nicht richtig, obwohl sie über den Aufruf vom Button anstandslos funktioniert!
Sie wird aufgerufen läuft dennoch nicht richtig!
Ich gehe davon aus, dass die dll-Funktion fehlerfrei ist, weil ich sie schon einigen Tests unterzogen habe

Wie kann das sein?

MfG new!
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 15:38
So was macht man nicht, das ist unschön. Du solltes Code von der GUI trennen. Schreib eine extra Prozedur und rufe diese in den OnClick Ereignisses des Menüeintrages und der Schaltfläche auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 15:41
@Luckie: Danke für die Antwort! Ich versuchs mal!
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 15:53
Immernoch das gleiche Problem!
Beim Button läuft alles und beim MenuItem zuckt nur einmal der Status in der Statusanzeige im Programm(,dass der Thread läuft)!

Ich habe den Code in eine externe Procedur gepackt und diese dann in den OnClick-Ereignissen aufgerufen!
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 16:07
Ohne mehr Code, wird da keiner was sagen können ...
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 16:15
Zitat von jim_raynor:
Ohne mehr Code, wird da keiner was sagen können ...
Welchen denn?
die Funktion in der dll funktioniert genauso, wie die Funktion zum Aufrufen!

Das Funktionsgerüst sieht momentan(nach Bearbeitung) so aus:
Delphi-Quellcode:
procedure exec() begin
... //Code, der funktioniert(mit Button1Click)
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
exec();
end;
procedure TForm1.Execute1Click(Sender:TObject);
begin
exec();
end;
//edit: nen paar Fehler
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#7

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 16:19
Wir können hier nicht hellsehen.

1. Ist der Code in Exec interessant.
2. Ist der Code in der DLL interessant, sofern du diese erstellt hast.

Übrigens noch ein Tipp für dich, wenn du auf Buttons, MenüItems und Toolbars gleiche Funktionen haben willst: Nutze Action-Listen (TActionList). Damit kannst du Actions definieren und diese den Elementen (Buttons, MenüItems etc.) zuweisen. Damit kannst du dann sehr einfach, die Funktion deaktivieren ohne die einzelnen Elemente zu deaktivieren.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 16:30
Delphi-Quellcode:
procedure exec();
var f:array[0..4095] of char;
s,r:array[0..16000] of char;
n:array[0..4] of char;
i:integer;
begin
if(isRep()=0)then begin
if form1.unix1.Checked then begin
n[0]:='\';
n[1]:='n';
n[2]:=#0;
end;
if form1.dos1.Checked then begin
n[0]:='\';
n[1]:='r';
n[2]:='\';
n[3]:='n';
n[4]:=#0;
end;
if form1.mac1.Checked then begin
n[0]:='\';
n[1]:='r';
n[2]:=#0;
end;
cpy(f,PChar(form1.edit1.Text));
cpy(s,Pchar(form1.memo1.Lines[0]));
if(form1.memo1.Lines.Count>1) then add(s,n);
for i:=1 to form1.memo1.Lines.Count-1 do begin
add(s,Pchar(form1.memo1.Lines[i]));
if(i<>form1.memo1.Lines.Count-1)then begin
add(s,n);
end;
end;
cpy(r,Pchar(form1.memo2.Lines[0]));
if(form1.memo2.Lines.Count>1) then add(r,n);
for i:=1 to form1.memo2.Lines.Count-1 do begin
add(r,Pchar(form1.memo2.Lines[i]));
if(i<>form1.memo2.Lines.Count-1)then begin
add(r,n);
end;
end;
if(s[0]<>#0) then replacer(f,s,r);
end else MessageBox(application.Handle,'Is busy!','ERROR!',MB_OK or MB_ICONERROR);
end;
"sofern du diese erstellt hast": hab ich.
Diese aber zu posten wäre nen wenig umständlich(viele Quelltextdateien) und rel. lang! und außerdem hat sie immer funktioniert!
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#9

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 17:01
Bis auf, dass du dir vielleicht eine gewissen Einrückung angewöhnen solltest, damit die Struktur klarer wird, kann ich erstmal nichts erkennen.

Hast du denn schonmal versucht mit einem Debugger dem Fehler auf die Spur zukommen?

Vielleicht liegts irgendwie an den Threads. Ich weiß es leider nicht. Auf jeden Fall muss er irgendwo durcheinander kommen. Hast du denn schon mal probiert, wie die DLL bei anderen Komponenten/Ereignissen reagiert. Vielleicht unterscheidet sich ja irgendwo die interne Verarbeitung des OnClick von TMenuItem und TButton, wodurch der Fehler auftritt ...



Beispiel für Einrückung:

Delphi-Quellcode:
procedure exec();
var
  f:array[0..4095] of char;
  s,r:array[0..16000] of char;
  n:array[0..4] of char;
  i:integer;
begin
  if(isRep()=0)then
  begin
    if form1.unix1.Checked then
    begin
      n[0]:='\';
      n[1]:='n';
      n[2]:=#0;
    end;

.
.
.

    for i:=1 to form1.memo2.Lines.Count-1 do
    begin
      add(r,Pchar(form1.memo2.Lines[i]));
      if(i<>form1.memo2.Lines.Count-1)then
      begin
        add(r,n);
      end;
    end;
    if(s[0]<>#0) then
      replacer(f,s,r);
  end
  else
    MessageBox(application.Handle,'Is busy!','ERROR!',MB_OK or MB_ICONERROR);
end;
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Selbe Procedur mit Button und MenuItem ansprechen?

  Alt 21. Apr 2006, 17:27
Danke für eure Bemühungen!
Ich werde versuchen das Problem zu finden und/oder Teile in die dll zu verschieben(is ja C)


Zitat von jim_raynor:
Bis auf, dass du dir vielleicht eine gewissen Einrückung angewöhnen solltest, damit die Struktur klarer wird, kann ich erstmal nichts erkennen.
Mach ich normalerweise auch (zumindest bei komplexeren Funktionen)!

Ich denke ich kennzeichne den Thread als erledigt und poste, wenn ich eine Antwort gefunden habe(und (noch) daran denke) die Lösung!

//TerminateThread(SelbeProcedur,0) ergänßt
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:03 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