Open existing file (Crosscompiling)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Open existing file (Crosscompiling)

Beitrag von Aliobaba »

Hallo,

Code: Alles auswählen

if form1.OpenDb.Execute then
  begin
    ....
  end;
diesen Dialog habe ich in meinem Programmcompilat unter Windows auch dazu benutzt, um ein neues File anzulegen; für Linux compiliert erscheint aber das Eingabefeld nicht mehr, in das ich den Namen eines neu zu erstellenden Files schreiben kann.

Kann man dieses Eingabefeld irgendwie "einschalten"?

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

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

Re: Open existing file (Crosscompiling)

Beitrag von theo »

Aliobaba hat geschrieben:

Code: Alles auswählen

if form1.OpenDb.Execute then
  begin
    ....
  end;
diesen Dialog
Welcher Dialog? Das sind nur Variablennamen, was soll man da erkennen?
Genau so gut könntest du schreiben.
A.B.Execute

Aber man benützt man zum Speichern von Dateien den TSaveDialog.

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Open existing file (Crosscompiling)

Beitrag von Aliobaba »

Bitte entschuldige, Theo!

Meine Angaben waren eine Zumutung.
openDB ist von TOpenDialog abgeleitet -> OpenDB: TOpenDialog

und da bietet eben das Windows Kompilat eine Eingabezeile an, das Linux Kompilat nicht.
Und diese Eingabezeile kann ich weiter auswerten, um eine neue Datenbank mit diesem Namen zu generieren.

Aliobaba

... und mein Code ist für Fortgeschrittene sicher auch ein Zumutung, aber ich nehme das mitleidige Lächeln der Forumuser dann eben hin :oops:

Code: Alles auswählen

  
procedure TForm1.Datenbank_neu_anlegen;
var
  ....
begin
  Datenbankname1 := ExtractFileName(Ed_Datenbankpfad_pers.Text);
  openDb.InitialDir := Ed_Datenbankpfad_default.Text;
  form1.OpenDb.Filename := '';        //  OpenDB: TOpenDialog
  if form1.OpenDb.Execute then
  begin
    ...
    neu_gewaehlte_DB := form1.OpenDb.Filename;
    i := Length(neu_gewaehlte_DB);
    s := copy(neu_gewaehlte_DB, i - 3, 4);
    if s <> '.mym' then neu_gewaehlte_DB := (neu_gewaehlte_DB) + '.mym';
    if FileExists(neu_gewaehlte_DB) then     // File existiert:
    begin
      ...
    end
    else         // File existiert nicht:    
    begin
      ...  // Dann wird eine neue Datenbank angelegt mit der Eingabe, die
           // vorher in der mir fehlenden Zeile im Linux-Kompilat gemacht wurde  (nächste Procedure)
    end;
  end;
  DB_Wechsel_schliessen;
end;
 
procedure TForm1.Neue_DB_anlegen(Neue_DB: string);
begin
  if not FileExists(Neue_DB) then
  begin
    Datenbanken_schliessen;
    if CopyFile(PChar(Ed_DbPfad_und_Name_default.Text), PChar(Neue_DB), False) then   // Ed_Datenbankpfad_pers
    begin
        //  Neue Datenbank wird angelegt)
    end
    else
    begin
      RaiselastOSError;
    end;
  end
  else
  begin
   .....
  end;
end;                
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

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

Re: Open existing file (Crosscompiling)

Beitrag von theo »

Ich bleibe dabei, dafür ist logischerweise der Savedialog vorgesehen.
Und es geht auch nicht um das "Kompilat" sondern darum, das GTK und Qt Dialoge das (wahrscheinlich) nicht anbieten.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Open existing file (Crosscompiling)

Beitrag von Christian »

Drück mal Strg+L im Dialog. Wenn du willst das sich die Dialoge exakt wie unter Windows verhalten, nimm Windows.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Open existing file (Crosscompiling)

Beitrag von Aliobaba »

Hallo Christian,
Christian hat geschrieben:Drück mal Strg+L im Dialog.

genau dieses Eingabefeld, das nach Strg-L erscheint, habe ich vermisst!! DANKE!!
Kann ich es bewerkstelligen, dass das Fenster gleich mit der "Option" "Strg-L" öffnet, also mit der Darstellung dieser Eingabezeile?
Christian hat geschrieben: Wenn du willst das sich die Dialoge exakt wie unter Windows verhalten, nimm Windows.
Du hast ja recht, aber die Bemerkung sei mir erlaubt, dass Lazarus ja andererseits damit wirbt:
Write once, compile anywhere
Und es gibt ja nicht so wenig Leute, die ihr "gewohntes Programm" gerne auch unter Linux in der gewohnten Weise haben möchten.
Und das funktioniert ja auch super, super gut!

Aliobaba

(Nachtrag: ... obwohl Theo Recht hat: Auch für den Anwender ist es "logischer" wenn er sich von vorneherein entscheiden muss: Will ich eine vorhandene Datei öffnen, oder eine neue Datei erstellen, so dass ich mein Programm entsprechend ändern werde. Aber trotzdem schon erstaunlich, wie toll derselbe Quellcode in beiden Welten (Linux und Windows) funktioniert!)
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Open existing file (Crosscompiling)

Beitrag von Christian »

Ich glaube du missinterprtierst da was.
Die Leute wollen nicht alle 5 min das Betriebsystem wechseln.
Ergo wollen die das sich der Open Dialog unter Linux so verhält wie er sich unter Linux immer verhält weil sie sich mit Linux auskennen.
Sie müssen dann auch ein Stück weniger "Spezialbedienung" von deinem Programm lernen.

Wo du "Write once compile everywhere" verletzt siehst versteh ich nicht. Das heisst ja nicht "Write once everything is everywhere exact equal".

Das Plattformverhalten lernt man eigentlich erst richtig unter OSX. Wenn sich da Programmteile nicht wie bei allen Programmen unter OSX verhalten werden die Programme schlichtweg nicht genutzt.
Als Entwickler darf man nicht mit dem Gedanken "Ich bin Gott und gebe die Bedienung vor" an die Sache herangehen. Sondern muss sich anpassen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Re: Open existing file (Crosscompiling)

Beitrag von theo »

Christian hat geschrieben:Drück mal Strg+L im Dialog.
Was passiert denn da bei euch? Ich seh nix.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Open existing file (Crosscompiling)

Beitrag von Christian »

Du benutzt ein QT basiertes System da sind das andere Dialoge. Bei GTK Dialogen wird da die Zeile eingeblendet.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Re: Open existing file (Crosscompiling)

Beitrag von theo »

Christian hat geschrieben:Du benutzt ein QT basiertes System da sind das andere Dialoge. Bei GTK Dialogen wird da die Zeile eingeblendet.
OK, Danke. Womit sich Ctrl + L als allgemeine "Lösung" auch wieder disqualifiziert.
Ich bleibe bei meinem Tipp: Sich immer schön am gemeinsamen Nenner der verschiedenen Plattformen orientieren, und für das Speichern einen SaveDialog nehmen. Das geht überall.

Antworten