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
Benutzerbild von himitsu
himitsu

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

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.
Ein Therapeut entspricht 1024 Gigapeut.

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
 
#2

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
44.374 Beiträge
 
Delphi 12 Athens
 
#3

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hoika

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

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
 
#5

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
 
#6

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


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:34 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