procedure über Button starten

Für Fragen von Einsteigern und Programmieranfängern...
Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

procedure über Button starten

Beitrag von Jakane »

Guten Tag,

normalerweise fand ich bisher alles was ich brauchte für mein Programm, nur mein jetztiger Wunsch ist irgendwie so einfach das ich dafür keine Lösung fand :oops:

In meinem Program habe ich ein 'TFileNameEdit' und ich habe einen Button 'Neu'
Wenn Neu geklickt wird und kein Datenpfad im Textfeld steht, geht bisher die Meldung auf 'Bitte Pfad eingeben'
Jetzt will ich das nicht mehr haben, deswegen rauskommentiert, sondern, wenn eben kein Datenpfad dasteht, soll er das Tfne öffnen, als wenn ich auf das Symbol geklickt hätte

Code: Alles auswählen

procedure fmKaiko_01.btnNeuClick(Sender: TObject);
begin                                 
if (txtDatenpfad.Text = '')
then
  Begin                                    
//    showMessage('Bitte Pfad eingeben');     
  end
  else                                  
  Begin                                   
 ...
  end;
end;
 
procedure fmKaiko_01.fneDatenpfadChange(Sender: TObject);
begin
txtHTMLFLaden.Text:=fneHTMLFLaden.Text;
end;
Ich danke jetzt schon für die schnellen Antworter und für die Hilfe allgemein :mrgreen:

PS: gefundene Schreibfehler bitte behalten
Zuletzt geändert von Lori am Fr 4. Mär 2011, 13:39, insgesamt 1-mal geändert.
Grund: Highlighter
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Benutzeravatar
theo
Beiträge: 10867
Registriert: Mo 11. Sep 2006, 19:01

Re: procedure über Button starten

Beitrag von theo »

Ruf doch einfach die Prozedur auf:

btnNeuClick(self);

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2807
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: procedure über Button starten

Beitrag von m.fuchs »

Es gibt im TFileNameEdit die Prozedur DoButtonClick mit der man das Anzeigen des Dialogs auslösen kann. Leider ist diese aber protected. Du müsstest die also eine eigene Klasse von TFileNameEdit ableiten in der diese Prozedur als public überschrieben wird.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

Re: procedure über Button starten

Beitrag von Jakane »

theo hat geschrieben:Ruf doch einfach die Prozedur auf:
btnNeuClick(self);
Die Hilfestellung hilft mir bei einem anderen Problem, danke
Aber...
wenn ich das mit meine Tfne verbinde, sagt der natürlich 'Datenpfad existiert nicht'
ich möchte ansich ja nicht das aufrufen was passiert WENN ich über Tfne den Pfad vorgegeben habe, sondern
das der mir Tfne öffnet damit ich einen Pfad eingeben kann, und dann die Prozedur die darauf folgt :)
m.fuchs hat geschrieben:Es gibt im TFileNameEdit die Prozedur DoButtonClick mit der man das Anzeigen des Dialogs auslösen kann. Leider ist diese aber protected. Du müsstest die also eine eigene Klasse von TFileNameEdit ableiten in der diese Prozedur als public überschrieben wird.
wie mach ich das ableiten? :mrgreen:
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2807
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: procedure über Button starten

Beitrag von m.fuchs »

Jakane hat geschrieben:wie mach ich das ableiten? :mrgreen:
Das ist noch relativ einfach:

Code: Alles auswählen

type
  TMyFileNameEdit = class(TFileNameEdit)
    public
      procedure DoButtonClick (Sender: TObject); override;
  end;
Und dann im implementation Bereich:

Code: Alles auswählen

procedure TMyFileNameEdit.DoButtonClick(Sender: TObject);
begin
  inherited DoButtonClick(Sender);
end;
Jetzt wird es etwas komplizierter: Entweder du registrierst dein neues Control, so dass es in der Komponentenpalette zu finden ist. Dann kannst du das alte TFileNameEdit einfach austauschen. Allerdings weiß ich nicht wie das geht (aber sicher ein paar andere Spezialisten hier). Oder du löscht das Control von deinem Form und erzeugst ein neues im OnCreate per Quellcode. Dann kannst du dir die Registriererei ersparen.
Nicht vergessen im OnDestroy das wieder zu zerstören!
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10867
Registriert: Mo 11. Sep 2006, 19:01

Re: procedure über Button starten

Beitrag von theo »

Ah sorry. Nächstes Mal vllt. statt "Tfne" das Wort ausschreiben, dann wird's klarer. ;-)

Hackmässig so:

Code: Alles auswählen

type
  TMyFNE=class(TFileNameEdit)
    public
     procedure DoButtonClick (Sender: TObject); override;
  end;
 
implementation
 
{ TMyFNE }
 
procedure TMyFNE.DoButtonClick(Sender: TObject);
begin
  inherited DoButtonClick(Sender);
end;
 
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  TMyFNE(FileNameEdit1).DoButtonClick(self);
end;
Das hat den Vorteil, dass du die Komponente nicht installieren musst.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2807
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: procedure über Button starten

Beitrag von m.fuchs »

theo hat geschrieben:

Code: Alles auswählen

TMyFNE(FileNameEdit1).DoButtonClick(self);
Äh ja, an einen Cast hab ich gar nicht gedacht.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

Re: procedure über Button starten

Beitrag von Jakane »

geil es funktioniert!! :D

bin zwar 3mal gestolpert, aber das macht ja nix :D

Ich danke herzlich für die schnelle Hilfe
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

Re: FileNameEdit - DialogOption abfragen

Beitrag von Jakane »

Hab ein neues kleines Problem mit meine 'FileNameEdit'

1. Datei ist vorhanden = wird geladen
2. Datei muss erstellt werden = muss auf Richtigkeit prüfen

wir sagt ich dem FNE jetzt "wenn 'Datei erstellt' dann ..." :?
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2807
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: FileNameEdit - DialogOption abfragen

Beitrag von m.fuchs »

Jakane hat geschrieben:wir sagt ich dem FNE jetzt "wenn 'Datei erstellt' dann ..." :?
SysUtils.FileExists(FileNameEdit1.FileName) liefert TRUE zurück wenn die Datei bereits existiert.

hth
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

Re: procedure über Button starten

Beitrag von Jakane »

vielen dank :)
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: FileNameEdit - DialogOption abfragen

Beitrag von Socke »

m.fuchs hat geschrieben:SysUtils.FileExists(FileNameEdit1.FileName) liefert TRUE zurück wenn die Datei bereits existiert.
bitte durch

Code: Alles auswählen

FileUtil.FileExistsUTF8(FileNameEdit1.FileName)
ersetzen. RTL- und LCL-Zeichensatz sind nicht zwingenderweise gleich oder überschneiden sich überhaupt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

Re: procedure über Button starten

Beitrag von Jakane »

Die Zeichensätze kenn ich nicht, aber "zum glück" lag der Fehler auch woanders :)
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: procedure über Button starten

Beitrag von Socke »

Jakane hat geschrieben:Die Zeichensätze kenn ich nicht
Ich will ja nur den richtigen Umgang mit den Zeichensätzen fördern. Was wo verwendet wird, ist eigentliche ganz einfach:
  • LCL UTF-8 in allen Widgetsets
  • RTL Systemzeichensatz (Byte-Folge, kann also ein Single-Byte-Zeichensatz wie CP-1252 (Windows-Westeuropäisch), ANSI oder auch UTF-8 sein)
  • alles andere entweder zeichensatzunabhängig (da nicht auf (System-)Bibliotheken zugegriffen wird)
  • externe Bibltiotheken siehe deren Dokumentation
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Jakane
Beiträge: 53
Registriert: Mo 21. Feb 2011, 14:35

Re: FileNameEdit - DialogOption abfragen

Beitrag von Jakane »

m.fuchs hat geschrieben: SysUtils.FileExists(FileNameEdit1.FileName) liefert TRUE zurück wenn die Datei bereits existiert.
Dieses SysUtils find ich langsam immer besser xD
Die Welt besteht aus Zahlen, also ist alles möglich.

Win XP

Antworten