AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Einen Button Click Event von anderem Formular aufrufen?
Thema durchsuchen
Ansicht
Themen-Optionen

Einen Button Click Event von anderem Formular aufrufen?

Ein Thema von Satyr · begonnen am 14. Mär 2012 · letzter Beitrag vom 16. Mär 2012
Antwort Antwort
Seite 2 von 2     12   
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 16:32
Ich hab den Fehler gefunden und weiß nicht was mich da am meisten veralbert: Delphi, Windows, meine Festplatte oder ich selbst.

Ich erkläre mal ein wenig mehr:
Der Button auf Form1 um den es geht, ändert Dateien. Er öffnet sie, schreibt was um, schließt und speichert. Funktioniert alles wie es soll.
Dann kam Form2 dazu. Dort wird nach mehreren Kriterien ein Verzeichnis gewählt, in das eben genannte Dateien kopiert werden sollen, vor dem bearbeiten DIESER Dateien.
Das kopieren funktioniert, das übergeben vom neuen Bearbeitungspfad auch. An der stelle dachte ich mir, ich mache das mit form1.button1.click; und fertig. Denn wenn ich per Hand auf diesen Button klicke, passiert genau das was passieren soll. Per Aufruf aber eben nicht.
Nun weiß ich auch wieso:
Das kopieren ist zu langsam.
Wenn der Aufruf von Button1 getätigt wird, sind die Dateien die geöffnet werden sollen noch nicht 100% fertig kopiert. Keine Fehlermeldung bekam ich weil ich die Dateioperationen schon mit if FileExists "abgesichert" hatte. Das erklärt auch warum es mit Händischem Klicken funktionierte. Es dauert schlicht einige Millisek. länger, bis ich geklickt habe.

Wenn ich if FileExists weg lasse, bekomme ich die Fehlermeldung "File not found". Wenn ich einen Delay von min. 250 millisek. einbaue, funktioniert alles. Sind es weniger als die 250millisek. dann nicht.
Für mich kein Problem das so zu lösen... aber ist das dann nicht arg abhängig von der Geschwindigkeit der Platte?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 17:40
aber ist das dann nicht arg abhängig von der Geschwindigkeit der Platte?
Frag uns doch nicht, denn wir wissen ja nicht, was DU mit den Dateien machst. (hat uns ja keiner verraten)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 17:52
Nichts aufwändiges.

Sind HTML Dateien die ich in ein Memo lade (weil ich will das man sieht welche Datei grade bearbeitet wird), einige Strings ersetze und wieder speichere. Mehr nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 18:19
FileStreams und auch das SaveToFile haben ihre Arbeit schon fertig, wenn der Befehl beendet ist.
Pausen gibt es da nicht, egal wie langsam die Platte ist, vorallem da alle diese Dateibefehle (standardmäßig) über WindowsFileCache umgeleitet werden, außer wenn die Cache explizit dektiviert wurde, aber auch da sind sie erst dann zurück, wenn sie irgendwann fertig sind.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Mär 2012 um 18:25 Uhr)
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 18:29
Aber schon das LoadFromFile gibt ne Fehlermeldung (File not found) aus, wenn ich keine Pause davor einbaue. Mit Pause klappt es, der Code der ausgeführt werden soll, scheint also im Grunde zu stimmen.
Ich kann es mir nur mit zu langsamen schreiben auf die Platte erklären. Also nicht damit das die WinApi hier zu langsam wäre, sondern die weiterverarbeitung der Hardware, quasi...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 19:51
Nochmals:

Wenn man nicht absichtlich asynchrone Dateioperationen verwendet oder mit Multithreading rumpfuscht, dann sind sie immer fertig, wenn der Befehl abgearbeitet wurde.
Das ist ja grade der Sinn einer synchronen Arbeitsweise.

Wie schnell die Festplatte ist, ist vollkommen egal. Standardmäßig wird alles über die WindowsFileCache umgeleitet.
Außer man arbeitet absichtlich mit NonBuffered-Dateioperationen oder der Datenträger ist explizit als NonCached konfiguriert. (wie z.B. USB-Sticks, welche für "schnelles Entfernen" konfiguriert sind)

Die Datei landet erstmal in der WFC und wird eventuell erst später vollständig auf die Platte geschrieben,
aber solange das der Fall ist, werden weitere Dateioperationen auf die in der WFC liegenden Dateiteile umgeleitet.


So, solange nicht weiteres zu den genauen Dateibehandlungen gesagt wird, werde ich schweigen, da es ganz einfach nichts weiter zu sagen gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 15. Mär 2012, 20:56
Hallo,

die Antwort

Form2.Button1Click(nil);

war ja eh falsch,
es soll ja der Button 1 von Form1 aufgerufen werden.

Aber trotzdem.
Was ist so schlimm daran, in TForm1 eine public-Methode ToWas
zu definieren, und in Button1Click

procedure TForm1.Button1Click(Sender: TObject);
begin
TuWas;
end;

in Form2 rufst du dann Form1.TuWas auf.



Heiko
Heiko
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 16. Mär 2012, 11:13
Heiko, genau das tue ich ja. Aber es klappt wie geschrieben an anderer Stelle nicht .

Ich suche heute Nachmittag/Abend mal Code raus und poste ihn, wenn ich zu Hause bin.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: Einen Button Click Event von anderem Formular aufrufen?

  Alt 16. Mär 2012, 17:15
Also, auf Form2 macht eine Procedure folgendes:

Delphi-Quellcode:
[..]
if bsSkinSelectDirectoryDialog1.Execute then
      begin
choosenDirectory := bsSkinSelectDirectoryDialog1.Directory;
tempName := ListBox1.Items[ListBox1.ItemIndex];
Form1.exportTo.Caption := choosenDirectory;
tempNameDir := Form1.programmdirectory.Caption+'..\webTemplates\'+tempName;
if func.CopyDir(tempNameDir, choosenDirectory) = True then begin
          [B]Form1.Button1.Click;[/B]
          ShowMessage('Export successfully!'); ShellExecute(handle,'open',PChar(choosenDirectory+'\index.html'),nil,nil, SW_SHOWNORMAL);
          Close;
         end;
        end;
[..]
Auf Form1 soll Button1 folgendes machen:

Delphi-Quellcode:
AdvMemo1.Lines.Clear;
AdvMemo1.Lines.LoadFromFile(exportTo.Caption+'index.html');
AdvMemo1.Lines.Text := StringReplace(AdvMemo1.Lines.Text,'$title', titleEdit.text,[rfReplaceAll]);
[..]
AdvMemo1.Lines.SaveToFile(exportTo.Caption+'index.html');
Ich habe das etwas gekürzt. Der StringReplace wird 20 mal mit verschiedenen Ersetzungssachen aufgerufen.
Form2 hat ListBox1 in welcher man verschiedene WebDesign Vorlagen wählen kann. Diese Vorlage wird dann in ein vom User gewählter Verzeichnis kopiert. Der Button1 auf Form1 bearbeitet die index.html aus dieser WebVorlage dann und passt sie wie gewünscht an.

Ich weiß, das ist kein hübscher Code und ich hätte es anders machen können - sicher auf 100 verschiedene Arten. Aber die WebExport Funktion in der Art wurde vom User erst nachträglich gewünscht. Es gab zwar vorher schon den WebExport (ist ne DB Anwendung) aber nicht mit Vorlagenwahl und sowas.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:31 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