Autor Beitrag
t3h
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: Sa 25.08.07 15:19 
Hi,

ich bin gerade dabei ein Programm zu schreiben, dass die sehr simple Funktion erledigen soll *.exe-Dateien (die ich vorher über openDialog) beim druck auf buttons (für jede exe-Datei einen) einlese zu starten (ich benutze dafür winexec). Jetzt ist das Problem an der Sache das wenn ich das Programm Schliesse die Buttons natürlich nicht mehr belegt sind. Ich müsste die Daten also in einer externen Datei abspeichern. Hab im Netz nirgends ne Erläuterung gefunden wie das geht... Ich wäre für jeden Rat dankbar!
Wonko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 69



BeitragVerfasst: Sa 25.08.07 16:21 
:welcome: erstmal.

Schreib' doch die Dateinamen z.B. in eine txt-Datei und lies diese bei Programmstart aus. Näheres dazu solltest Du in der Delphi-Hilfe oder der Foren-Suche finden. Bei konkreten Fragen fragen.
Masthe
Hält's aus hier
Beiträge: 13


Delphi & Projektmanagement
BeitragVerfasst: Sa 25.08.07 18:30 
Titel: dauerhaft - bis irgedwer es löche xD
Hi auch!
Neu hier gell ;)
naja ich bin eigentlich auch eher wo anders aktiv (*hust*meineeigenewebsite*hust*)
aber hier mein Tipp:
google mal nach INI-Files ;)
das ist für den Anfang das beste... :roll:
bzw. was hast für ne IDE?

_________________
Die Zukunft hängt davon ab, was wir heute tun. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19317
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 25.08.07 20:10 
Erstens: WinExec ist eine äußerst schlechte Idee... Das ist schon lange veraltet und sollte nicht mehr verwendet werden, eine Alternative habe ich hier bei einer ähnlichen Frage gepostet:
www.delphi-forum.de/viewtopic.php?t=75270

Zweitens: Die wohl einfachste Lösung besteht darin, eine StringList zu benutzen. Dafür sind mehrere Schritte nötig:
1. Brauchst du eine global verfügbare Variable vom Typ TStringList, in der die StringList steht. Die kannst du z.B. unter private oben in die Formulardeklaration schreiben.
2. Wenn das Programm gestartet wird (OnCreate des Formulars), muss die StringList erzeugt werden (TStringList.Create benutzen und das Ergebnis in die Variable).
3. Dann muss nachgesehen werden, ob die Datei mit den Daten existiert (FileExists) und es müssen ggf. die bestehenden Daten geladen werden (LoadFromFile).
Die Datei kann der Einfachheit halber im eigenen Verzeichnis liegen, auch wenn das nicht so gut ist (Stichwort Anwendungsdatenverzeichnis), sodass der Dateiname mit Pfad ExtractFilePath(ParamStr(0)) + '\dateiname.dateiendung' ist.
Wenn die Datei nicht existiert, sollten Dummy-Daten in die StringList (xy ist deine Variable):
ausblenden Delphi-Quelltext
1:
xy.Text := #13#10#13#10#13#10#13#10#13#10;					

4. xy[0], xy[1], etc. sind jetzt ggf. die zugewiesenen Exe-Dateien. Die kannst du bei einem Klick auf den jeweiligen Button dann zum Starten benutzen bzw. nach dem OpenDialog den neuen Dateinamen reinsetzen (und dann mit SaveToFile die Liste speichern).
5. Ganz wichtig: In OnDestroy muss die StringList noch wieder freigegeben werden:
ausblenden Delphi-Quelltext
1:
xy.Free;					

Am besten wäre natürlich zur Speicherung die Registry geeignet.
Masthe
Hält's aus hier
Beiträge: 13


Delphi & Projektmanagement
BeitragVerfasst: Sa 25.08.07 20:26 
@jaenicke wow, du schiest da mit schweren geschützen xD
ich denk mir halt, dass t3h bisher nich so viel mit Delphi zu tun hatte, und wollte es einfach angehen xD
ShellExecute wäre da evtl zu kompliziert für ihn|sie.
Und Stringlist würd ich für so ne einfache sache auch verwenden, aber ich find es besser wenn er sich mal in die INIs am anfach einarbeitet, auf jeden Fall bevor er sich in die Registry einarbeitet!
Zudem hast bei der Registry noch ein Problem: wenn er|sie kein Admin ist, dann ist es doof xD
Bin da auch grad an einem Tut für meine Site zu den INI-Files, wird in der nächsten Stunde online sein :)

t3h ist wohl nicht so schnell wieder online?

naja, was mich interessieren würde: was ist das für ein programm/ was ist der zweck des programmes?
so ne art autostarter? oder CD-Menü?

_________________
Die Zukunft hängt davon ab, was wir heute tun. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19317
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 25.08.07 20:42 
user profile iconMasthe hat folgendes geschrieben:
ShellExecute wäre da evtl zu kompliziert für ihn|sie.
Das sollte mit einem Beispiel ja kein Problem sein. (Im verlinkten Thread)

user profile iconMasthe hat folgendes geschrieben:
Und Stringlist würd ich für so ne einfache sache auch verwenden, aber ich find es besser wenn er sich mal in die INIs am anfach einarbeitet, auf jeden Fall bevor er sich in die Registry einarbeitet!
Die Registry ist finde ich eigentlich viel besser geeignet und sollte ja auch eigentlich dafür benutzt werden. INI-Dateien sind eigentlich unter Windows auch veraltet. Dass sie sehr viele dennoch oft benutzen, weiß ich auch. Auch wenn ich nicht verstehe warum, schließlich gibts da ja nur Vorteile bei portablen Programmen.
Wenn man unter Vista ne INI im Programmverzeichnis unter c:\programme speichert, funktioniert zum Beispiel das ganze Programm nicht mehr bzw. nur mit Adminrechten (Ausführen als Administrator). Und das finde ich auch gut so.
Und wenn man dann sauber programmiert, dann muss man ne INI im Anwendungsdatenverzeichnis speichern, was das ganze auch schwieriger macht.

user profile iconMasthe hat folgendes geschrieben:
Zudem hast bei der Registry noch ein Problem: wenn er|sie kein Admin ist, dann ist es doof xD
Warum? Wenn man nicht falsche Registry-Zweige benutzt, dann geht das sehr gut... Unter HKCU\Software kannst du auch ohne Admin-Rechte deine Einstellungen lesen und schreiben.
Masthe
Hält's aus hier
Beiträge: 13


Delphi & Projektmanagement
BeitragVerfasst: Sa 25.08.07 20:53 
okay....
Mit Vista hab ich noch null Erfahrung, da kann ich nichts dazu sagen,
zudem denk ich, dass die Mehrheit immernoch XP benutzt,
daher bin ich davon ausgegangen, dass t3h auch XP benutzt xD

Zitat:
Warum? Wenn man nicht falsche Registry-Zweige benutzt, dann geht das sehr gut... Unter HKCUSoftware kannst du auch ohne Admin-Rechte deine Einstellungen lesen und schreiben.

und schonwieder was dazugelernt :)

Aber ich wart jetzt mal ab, was t3h dazu sagt ;)

_________________
Die Zukunft hängt davon ab, was wir heute tun. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19317
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 26.08.07 12:32 
user profile iconMasthe hat folgendes geschrieben:
Mit Vista hab ich noch null Erfahrung, da kann ich nichts dazu sagen,
zudem denk ich, dass die Mehrheit immernoch XP benutzt,
Das hat gar nicht so viel mit Vista zu tun, eigentlich war es schon unter 2000 verpönt etwas in das Verzeichnis der eigenen Anwendung zu schreiben, aber es haben sich eben viele nicht dran gehalten. Vermutlich einfach aus Unwissenheit oder Bequemlichkeit zu Lasten der Benutzer. Und unter Vista (und meinem alten PC unter XP z.B. auch) kann man eben ohne Adminrechte aus Sicherheitsgründen gar nicht unter c:\programme schreiben. Mal abgesehen davon, dass ich Software, die das tut, ohnehin meistens gleich wieder in den Papierkorb werfe, weil ich daran sehe, dass der Programmierer nicht viel Ahnung hat (es sei denn es ist explizit portable Software oder als solche gedacht).

Aber jetzt warte ich auch erstmal auf eine Antwort vom Fragesteller... ;-)
t3h Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: So 26.08.07 13:58 
Titel: Aja
Antworten:
1. Ja Delphi ist recht neu für mich. (5 Tage selbstbeigebracht)

2. Ja, wollte zuerst ShellExecute benutzen, hab die ganzen Parameter allerdings nicht verstanden, und auch nirgends ne vernünftige Erklärung/Beispiele gefunden.(Gibt es so Referenz-Seiten wie z.B. www.css4you.de/?)

3. Das Programm sieht zurzeit so aus:


user defined image


und der Quelltext so:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button4Click(Sender: TObject);
begin
WinExec ('C:\Programme\mIRC\mirc.exe', SW_ShowNormal);
end;

4. Dann hat mich nen Freund gefragt ob er das Programm auch haben kann, und dafür musste der Quelltext flexiber werden.(Benutzer muss sich die Buttons selber belegen können.)

Fragen:

1. Die Liste zu beschreiben funktioniert jetzt ich versteh nur nicht so ganz wie man Sachen (einzelne Strings) jetzt wieder daraus auslesen kann.

1. Links zu der *.Ini/Registry-Methode?[/quote]
Masthe
Hält's aus hier
Beiträge: 13


Delphi & Projektmanagement
BeitragVerfasst: So 26.08.07 14:58 
Okay.
Auslesen tust du die Liste mit
ausblenden Delphi-Quelltext
1:
s:=MyList.String[Index];					


aber ich empfehle dir eher: mach das besser mit INI-Files.
am anfang kannst es beschränken, aber wenn du wirklich n Elemente willst, dann musst du dich auch wieder für was anderes entscheiden...
dann machs besser per Ini und les zuerst die SectionValues aus, und dann die einzelnen KeyValues per ReadString.
genaueres kannst ja sicher per google finden...
meine website ist leider noch nicht so weit fertig, dass ein erweitertes INI-Tut besteht.
bisher nur das da: delphi-lernen.de/joo...;id=73&Itemid=59

also viel Spaß mit Delphi ;)

Gruß Marco

_________________
Die Zukunft hängt davon ab, was wir heute tun. (Mahatma Gandhi)
blaueled
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 133

Win XP
D5
BeitragVerfasst: So 26.08.07 16:00 
Hallo,

ich finde, dass man das programm auch für Portable Medien und dort gespeicherte Programme benutzen kann. Ich würde dir auch zu einer INI datei raten. (Tutorial: dsdt.info/tutorials/ini/) Ansonsten käme auch noch eine xml Datei infrage, aber das ist in dem Fall overkill.
t3h Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: So 26.08.07 18:23 
Titel: ShellExecute
Bin jetzt auf ShellExecute und Ini-Files umgestiegen. Allerdings tritt jetzt immer beim compilieren der Fehler auf:

user defined image

Dachte zuerst hätte vergessen den Speicher freizugeben ist aber nicht der Fall.
Irgendjemand Ideen womit es zusammenhängen könnte?
Masthe
Hält's aus hier
Beiträge: 13


Delphi & Projektmanagement
BeitragVerfasst: So 26.08.07 18:37 
check mal deine for oder while-schleifen ;-)
"da läuft wohl was über" xD

_________________
Die Zukunft hängt davon ab, was wir heute tun. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19317
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 26.08.07 19:08 
Der Fehler war: Er hat ein zweites Formular TEdit genannt. Und da kam Delphi dann mit der Komponente TEdit durcheinander, als das erzeugt werden sollte.
t3h Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: So 26.08.07 19:10 
Hab den Fehler mein 2. Formular hies: TEdit (wie die Komponente),
Danke nochmal an alle!