Autor |
Beitrag |
Mipi
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: Sa 22.11.08 21:59
Hallo zusammen.
Zuerst einmal:
Ich sitze nun schon 20 Minuten daran, diesen Beitrag zu schreiben. Grund: Während ich ihn schreib, probiere ich immer wieder in Delphi etwas aus. Eigentlich sollte der Beitrag über etwas anderes handeln, allerdings habe ich es doch hinbekommen nach 15 Minuten
Nachteil, ich muss den kompletten Beitrag überarbeiten
Aber zum Glück stehe ich vor einem weiteren Problem, wodurch sich dieser FireFoxTab doch lohnt
Ich beschreib am besten erstmal, was der kleine Teil des Programms machen soll:
Ich habe mehrere Edit-Felder deren Werte ich gerne in eine Ini Datei abspeichern möchte. Ein Edit-Feld beschäftigt sich mit dem Namen der zu erstellenden Ini Datei. Das heißt, ich kann mir den Namen frei aussuchen.
Delphi-Quelltext 1:
| ini := TIniFile.Create(EditSchiffsname.text+'.ini'); |
Nur erstellt er die Ini Datei jetzt ja in C:\Windows
Ich möchte die Dateien aber gerne in einem Unterordner sehen.
Wenn das Programm selber also beispielsweise in folgendem Verzeichnis:
C:\Test
liegt, sollen die Ini Dateien in diesem Verzeichnis erstellt werden:
C:\Test\Schiffe
Ich erwarte nicht von dem Programm, dass es den Unterordner selber erstellt (MkDir wäre hier wahrscheinlich das passende Mittel). Der Unterordner ist einfach schon gegeben.
Nun habe ich aber auch gelesen, dass es zu Problem führen kann, wenn ich den Pfad nicht komplett angebe im Code. Als Möglichkeit konnte ich
Delphi-Quelltext 1:
| (ExtractFilePath(ParamStr(0))) |
herausfinden (hab es hier im Forum gelesen).
Nur wie sieht jetzt die Zeile komplett aus, wenn ich die Ini Datei in dem Unterordner erstellen möchte?
Ich habe hier mehrere Varianten, die nur noch "zusammengefügt" werden müssten:
Delphi-Quelltext 1:
| ini := TIniFile.Create(EditSchiffsname.text+'.ini') |
Delphi-Quelltext 1:
| ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Schiff.ini') |
Ein weiterer Schubser in Richtung Lösung wäre nett
Gruß,
Mipi
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 22.11.08 22:27
Delphi-Quelltext 1:
| ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\Test\' + edtSchiffsname.Text + '.ini'); |
?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 22.11.08 22:41
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: So 23.11.08 08:49
Manchmal sieht man den Wald vor lauter Bäumen nicht =D
Vielen Dank, ich werde es in ein paar Stunden (wenn ich ausgeschlafen bin) mal ausprobieren
Aber spätestens beim Datenbank-Part werde ich euch wahrscheinlich erneut fragen
Also, danke nochmal 
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: So 23.11.08 18:11
Entschuldigung, wenn ich schon wieder störe.
Aber ich erhalte eine Fehlermeldung wenn ich diese Zeile einfüge:
---------------------------
Debugger Exception Notification
---------------------------
Project projekt.exe raised exception class EIniFileException with message 'Unable to write to C:\Dokumente und Einstellungen\Denis\Desktop\X-Wars\Schiffe\Schiffsname.ini'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Also habe ich mal die Ordnereigenschaften überprüft, der Ordner war auf "schreibgeschützt". Ich wollte dann also das Häkchen wegnehmen, doch direkt danach war er wieder schreibgeschützt. Also bin ich in den übergeordneten Ordner gewechselt und habe diesem gesagt, er solle doch bitte nicht schreibgeschützt sein (ich hab zwar nicht verstanden, warum er schreibgeschützt war, aber naja). Dann kam auch die Meldung (nicht 1:1, aber das stand in etwa drin):
"Möchten sie die Einstellungen für alle Unterordner/Dateien übernehmen?"
Habe ich mit ja bestätigt. Nach einem Überprüfen stellte ich aber fest, dass der komplette Ordner immer noch schreibgeschützt ist.
Sehe ich zum ersten Mal sowas, bin ganz normal mit dem Adminaccount (das einzige Konto auf dem Rechner) angemeldet. Ich benutze XP HomeEdition.
Gruß,
Mipi
Nachtrag:
Die Meldung kommt aber nur, wenn ich:
Delphi-Quelltext 1:
| ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Schiffe\' + editSchiffsname.Text + '.ini'); |
anstelle von:
Delphi-Quelltext 1:
| ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + editSchiffsname.Text + '.ini'); |
benutze.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 23.11.08 19:22
Aber den Unterorder Schiffe gibt es, und ist auch richtig geschrieben?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: So 23.11.08 19:24
Ja, es gibt im Ordner "Tool" (da sind alle Projektdateien drin) den Unterordner "Schiffe".
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 23.11.08 19:25
Nochmal:
Gibt es genau DIESEN Ordner?
C:\Dokumente und Einstellungen\Denis\Desktop\X-Wars\Schiffe\
Da steht nix von "Tool".
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 23.11.08 19:29
Außerdem gehören irgendwelche Daten nicht ins Programmverzeichnis bzw. Unterverzeichnisse davon. Spätestens ab Vista fällt einem das dann auf die Füße.
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: So 23.11.08 19:32
Oh je, das tut schon mehr als weh
Danke für den Wink mit dem Zaunpfahl Xentar :-/
Aber das Programm soll ja die Daten der verschiedenen Modelle wieder aus den ini Daten auslesen. Dachte da wäre ein Unterordner am besten.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 23.11.08 20:01
DeddyH hat folgendes geschrieben : | Außerdem gehören irgendwelche Daten nicht ins Programmverzeichnis bzw. Unterverzeichnisse davon. Spätestens ab Vista fällt einem das dann auf die Füße. |
Ja dazu gibt's einen thread von mir...: www.delphi-forum.de/viewtopic.php?t=69508 auf Seite 2 gibt's meine Lösung für dieses Problem, nur der Vollständigkeit halber. Dabei geht's darum, zu erkennen, ob ein Anwendungsdaten-Ordner von der Plattform gewünscht wird, oder nicht. Grundsätzlich kann unter Vista kein Programm ohne adminrechte auf C:\Program Files\ schreiben.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 23.11.08 21:08
Die Lösung für das Problem heißt: sich an die vorgegebenen Konventionen halten  . Daten sollten also unter den Anwendungsdaten des Users bzw. aller User (sofern notwendig) abgelegt werden. Diese Verzeichnisse kann man mit SHGetFolderPath, SHGetSpecialFolderLocation und noch ein paar anderen Funktionen ermitteln.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 23.11.08 21:17
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 23.11.08 21:19
Das hab ich komplett überlesen  . Aber wir sind uns ja im Kern einig 
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: So 23.11.08 21:56
Ja, das habe ich auch schon gelesen.
Nur ich dachte, es wäre praktischer, das trotzdem dort abzulegen
Nun gut, dann werde ich den MightyButton eben noch erweitern
Den neuen Ordner muss ich dann ja denke ich mit "MkDir" erstellen.
Das heißt, jedesmal wenn man dann eine neue ini erstellt, wird versucht den Ordner neu zu erstellen.
Aber es gibt sicherlich etwas in der Richtung (bitte nicht verraten, möchte es selber suchen, macht mehr Spaß  ) :
Delphi-Quelltext 1:
| Falls Ordner/Pfad so-und-so nicht existiert, erstell ihn doch bitte :) |
Also einfach mit einer einfachen If-Formulierung und den passenden Befehlen.
Im Moment habe ich nur keine Lust die Delphi-Hilfe zu öffnen, da ich grade vom Schneeschippen komme (und die zu schippende Fläche war nicht gerade klein)
Also vielen Dank schonmal
Gruß,
Mipi
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 23.11.08 22:04
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: Mo 24.11.08 20:47
Der Link ist bei mir schonmal angeklickt gewesen.
Ich habe mir natürlich nicht alles 1:1 gemerkt, auch deshalb, weil ich zu der Zeit andere Sachen auf die Spur kommen wollte
Gruß,
Mipi
|
|
Mipi 
Hält's aus hier
Beiträge: 14
Win XP
Delphi 2006
|
Verfasst: Fr 05.12.08 13:55
Hi, ich bins wieder
Nach kurzer Pause habe ich wieder bisschen Zeit, um ein wenig weiterzukommen
Ich stehe jetzt vor folgendem Problem (wahrscheinlich ist es kein Problem, sondern nur auf meine Müdigkeit zurückzuführen).
Asugangssituation:
Ich habe meine Combobox soweit, dass sie mit den Ini Dateien im Unterordner "Schiffe" gefüllt ist.
Sollte ich zwischendurch eine Ini Datei hinzufügen, so wird auch diese direkt mit in die Liste übernommen.
Wie es am Ende sein soll:
Wenn der Benutzer nun einen Schiffstyp aus der Liste der ini Dateien auswählt, so sollen verschiedene Parameter dieses Schiffes in verschiedenen EditFeldern, Labels etc. angezeigt werden (indem die Ini Datei einfach ausgelesen wird).
Mein Weg:
Da ich eigentlich zum ersten mal eine Combobox verwende, weis ich nicht wirklich welche Befehle es alles gibt. Habe mich durch die Delphi-Hilfe gewühlt, aber nicht das gefunden, was ich gerne haben möchte (wahrscheinlich einfach nur überlesen. In dem Fall bitte in die richtige Richtung schieben  ).
Ich wollte so vorgehen, dass der Name der aktuell ausgewählten ini Datei in eine Variable reinkopiert wird, sodass ich dann einfach mit dem Lesen dieser ini Datei anfangen kann und dadurch dann die ganzen Felder füllen kann. Wie man Ini Datei auslesen kann, ist mir bewusst. Ich scheitere im Moment nur daran, an den Namen der aktuell ausgewählten Ini Datei zu gelangen. Da gibt es doch bestimmt was ganz was einfaches, was ich nur nicht kenne
Mir schebt da sowas wie:
Delphi-Quelltext 1:
| name := Combobox.SelectedItem |
Ich habe, während ich den Beitrag geschrieben habe, zwischendurch immer wieder in Delphi rumgesucht und folgendes gefunden:
Delphi-Quelltext 1:
| property SelText: string; |
Laut Beschreibung gibt dies ja den Text des derzeit ausgewählten Items wieder.
Nur steht auch dabei, dass meine Combobox den Wert von focus auf true gesetzt haben muss.
Da ich diese Einstellung nicht im Object Inspector gefunden habe, wollte ich es einfach in den Code integrieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TFormSchiffsbestellung.CBSchiffstypenSelect(Sender: TObject); var name:string; begin CBSchiffstypen.Focused := true; name := CBSchiffstypen.SelText; LabelName.Caption := name;
end; |
Nun bekomme ich dabei allerdings in der Zeile, in der ich Focused auf true setze die Fehlermeldung:
"Left side cannot be assigned to"
Die Hilfe hilft mir hier nicht wirklich weiter:
"This error message is given when you try to modify a read-only object like a constant, a constant parameter, or the return value of function."
Kann man die Eigenschaft "focused" einer ComboBox nicht auf diese Weise ändern?
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 05.12.08 14:13
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.ComboBox1Change(Sender: TObject); begin LabelName.Caption := ComboBox1.Items[ComboBox1.ItemIndex]; end; |
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 05.12.08 14:54
Um zu den Pfaden nochmal was zu sagen:
Ich habe in diesem Beitrag in der Library das Thema erörtert, in der zweiten Hälfte (ab "Dann gibt es da noch ein weiteres Problem:") habe ich dort den Zugriff auf das Anwendungsdatenverzeichnis beschrieben, und dort gehören die Dateien hin. Denn wie bereits gesagt wurde, wird es normalerweise so sein, dass du in das Verzeichnis deiner Anwendung nicht schreiben kannst, wenn diese unter C:\Programme liegt.
(Auf einem schlecht konfigurierten System in der Standardeinstellung geht das unter XP, aber wer sich auskennt, bei dem gehts nicht. Und unter Vista gar nicht mehr.)
www.delphi-library.d...iewtopic.php?t=82952
|
|