Autor |
Beitrag |
Knedcox
Beiträge: 79
|
Verfasst: So 04.09.05 17:55
Hi,
danke erstmal an alle die mir mit Rat und Tat zu Seite gestanden haben. Mein Programm ist jetzt fast fertig und ich wollt Euch mal zeigen, was dabei rausgekommen ist.
Es soll meinem Hausmeister in der Schule dabei helfen, seine Schlüssel zu verwalten. Eigentlich erklärt sich das Programm von selbst (hoffentlich). Das einzige was noch nicht funktioniert, was aber eigentlich ein grundlegender Bestandteil sein müsste, ist, dass man jedem Lehrer lediglich einen Schlüssel zuordnen kann.
Bzw. man kann zwar jedem mehrere zuordnen, nur kann man diese Schlüssel leider nicht getrennt voneinander aufrufen. Wäre sehr wichtig, wenn der Hausmeister z.B. gucken möchte, welche Lehrer alle den Biosaal-Schlüssel haben. Habs schon auf mehrere Arten wochenlang probiert, komm aber nicht weiter.
PS. Wahrscheinlich hab ich das Programm nicht auf die einfachste und unkomplizierteste Weise geschrieben, aber da ich nur zwei Wochen in der Schule vor den Ferien mit Delphi zu tun hatte, bin ich doch ganz stolz, dass es soweit funktioniert (Danke an der Stelle noch mal für die Geduld:wink: ).
PPS. Für Vorschläge, wie ich mein letztes Problem lösen könnte, wäre ich dankbar.
PPPS. Die ersten Änderungen hab ich vorgenommen, jetzt kann die Version 1.1 downgeloadet werden.
Einloggen, um Attachments anzusehen!
_________________ Habt bitte Geduld, bin nur eine Anfängerin...
Zuletzt bearbeitet von Knedcox am So 04.09.05 19:43, insgesamt 5-mal bearbeitet
|
|
adfontes
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: So 04.09.05 18:00
Knedcox hat folgendes geschrieben: | PPPS. Weiß nicht, wie man den ganzen Ordner hochladen kann... Wollte ihn auf eine Homepage online stellen, aber das klappt irgendwie auch nicht, weil er kein Verzeichnis anzeigt... |
ich würd den ordner packen (in ein rar archiv o.Ä.) und dann also halt die Archivdatei hochladen
btw. find ich eine nette geste von dir dem hausmeister gegenüber, so ein programm in deiner freizeit zu programmieren, oder war es eine art zusatzaufgabe?!?
greetz
adfontes
PS: ich gucks mir später auf jeden fall mal an, wollte nur grade das mit dem archiv loswerden ^^
|
|
Knedcox
Beiträge: 79
|
Verfasst: So 04.09.05 18:14
Das ist ne freiwillige Aufgabe vom Informatiklehrer für nen Pluspunkt.
Danke erstmal für den Tipp; probiers gleich mal aus.
_________________ Habt bitte Geduld, bin nur eine Anfängerin...
|
|
jakobwenzel
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: So 04.09.05 18:21
Habs mir mal angeguckt
Beim Starten meckert er, er könne eine Hintergrundbilddatei (D:\Schlüssel\Lil Hintergrund.bmp) nicht finden.
(Normalerweise sollte man keine Eigenen Hintergründe setzen, sondern den Windows-Standard verwenden.
Eingentliches Programm:
Ganz Gut, nur: Wird automatisch gespeichert, oder kann man nicht speichern?
Eine Auflistung aller Lehrer wäre sinvoll, wenn man die Suchfelder leer lässt kommt nämlich die Meldung, man solle etwas eingeben. Also: entweder zusätzlicher Button (z.B.: "Alle Lehrer anzeigen"), oder bei leeren Suchfeldern alle anzeigen. Genauso bei Ändern und löschen.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
adfontes
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: So 04.09.05 18:25
jakobwenzel hat folgendes geschrieben: | Habs mir mal angeguckt
Beim Starten meckert er, er könne eine Hintergrundbilddatei (D:\Schlüssel\Lil Hintergrund.bmp) nicht finden.
(Normalerweise sollte man keine Eigenen Hintergründe setzen, sondern den Windows-Standard verwenden.
|
joa, der bg motzt bei mir auch rum ^^ ... aber ich würde, wenn schon eigene Hingergründe, dann nicht den absoluten Pfad angeben... dadruch machst du das Programm eigentlich nur zu deinem rechner kompatibel, bzw. zu rechner, die es EXAKT gleich lagern... (bin ja froh, dass ich ne D-Platte hab zum testen *g*)
greetz
adfontes
//Edit: find den lila bg ohnehin net so doll, also im prinzip froh, dass er net geht (sorry)
//Edit2: ist es nicht was überflüssig, ein ganzes memofeld anstatt ein einfaches TEdit/TLabelEdEdit bei dem "neu anlegen" zu verweden ? oder haben bei euch die Lehrer Namen die man über mehrere Zeilen schreiben muss (davon mal abgesehn, dass sie bei der suche dann ohnehin wieder in eine Zeile kommt oO
|
|
Knedcox
Beiträge: 79
|
Verfasst: So 04.09.05 18:43
1. Nee, ich glaube der Hausmeister brauch keine Auflistung aller Lehrer. Das Programm ist dazu da, um z.B. nach einem Lehrer oder einem Schlüssel zu suchen, um zu gucken, wer was hat. Kann mir keine Situation vorstellen, warum der Hausmeister alle gleichzeitig sehen wollte...
2. Das mit dem Hintergrund müsste jetzt funktionieren und außerdem bin ich ein Mädchen und find lila ganz toll. Ist doch mal was anderes. Ich hab bestimmt ne Stunde gesucht, bis ich überhaupt ne Farbe hatte, die meinen Ansprüchen genügt.
3. Bei der Eingabe gibt es aus dem Grund Memofelder, da man ja auch nach Schlüsseln anlegen kann (z.B. Biosaal-Schlüssel haben zehn Lehrer).
4. Die Frage mit dem Speichern versteh ich nicht so ganz... Wenn man auf speichern drückt, speichert er es auf jeden Fall mal.
Merci schon mal vorab für die Anregungen.
_________________ Habt bitte Geduld, bin nur eine Anfängerin...
|
|
adfontes
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: So 04.09.05 18:50
Knedcox hat folgendes geschrieben: | 2. Das mit dem Hintergrund müsste jetzt funktionieren und außerdem bin ich ein Mädchen und find lila ganz toll. Ist doch mal was anderes. Ich hab bestimmt ne Stunde gesucht, bis ich überhaupt ne Farbe hatte, die meinen Ansprüchen genügt. |
jedem das seine ^^
Knedcox hat folgendes geschrieben: | 3. Bei der Eingabe gibt es aus dem Grund Memofelder, da man ja auch nach Schlüsseln anlegen kann (z.B. Biosaal-Schlüssel haben zehn Lehrer). |
zu dem Schlüssel-Memofeld sag ich ja nichtmal was, mir gings eher um das Eingabe Feld für die Lehrer, wenn ich da jetzt z.B.
Quelltext 1: 2: 3: 4:
| herr bla frau kA mööp etc |
eingebe und speichere, dann krieg ich bei der suche alles in einer Zeile
Quelltext 1:
| herr blafrau kAmööp etc |
und das sieht nich so wirklich so gewollt aus, oder ?!?
// edit: bei den schlüsseln übrigens genauso^^
// edit2: beim einfügen hier hab ich über STRG+C und STRG+P rüberkopiert... da hat er dann auch wieder alles in einzelne zeilen gepackt... also
Knedcox hat folgendes geschrieben: | 4. Die Frage mit dem Speichern versteh ich nicht so ganz... Wenn man auf speichern drückt, speichert er es auf jeden Fall mal. |
wenn ich jetzt wüsste was du damit meinst oO
greetz
adfontes
|
|
jakobwenzel
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: So 04.09.05 19:02
Mit abspeichern meinte ich als Datei auf der Festplatte ablegen, die bei Programmstart wieder eingelesen wird. Sonst muss der Hausmeister bei jedem Programmstart die Lehrerliste neu erstellen
Der Hintergrund geht noch nicht. Du musst bei dem Dateinamen anstatt
Delphi-Quelltext 1:
| Image1.picture.loadfromfile('D:\Schlüssel\Lila Hintergrund.bmp'); |
Delphi-Quelltext 1:
| Image1.Picture.LoadFromFile(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+'Lila Hintergrund.bmp'); |
Application.ExeName gibt den Dateinamen der Programmdatei zurück, der dann an ExtractFilePath übergeben wird. ExtractFilePath gibt den Pfad der übergebenen Datei (je nach Windows-Version mit oder ohne Backslash) zurück. Damit der Backslash auf jeden Fall vorhanden ist, wird die Funktion IncludeTrailingBackslash aufgerufen, die einen Backslash an das Ende des übergebenen Strings hängt, falls da nicht schon einer ist. Danach wird der Dateiname der Bilddatei drangehängt, und das fertige Konstrukt wird am LoadFromFile übergeben.
P.S.:Anstatt Application.ExeName kann auch ParamStr(0) benutzt werden.
P.P.S.: Application.ExeName ruft intern auch nur ParamStr(0) auf.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Knedcox
Beiträge: 79
|
Verfasst: So 04.09.05 19:24
1. Das mit dem Bild werd ich gleich mal so machen. Update kommt sofort...
2. Ich speicher das nicht auf den PC, weil ich gedacht hab, wenn er die compilierte Version an und aus macht, bleiben die Daten drin. Oder irre ich mich da?
3. Adfontes, das ist genau mein Problem (mit den mehreren Schlüsseln und Lehrern). Da weiß ich halt noch nicht, wie ich das lösen soll...
Problem erklär ich noch mal:
Das einzige was noch nicht funktioniert, was aber eigentlich ein grundlegender Bestandteil sein müsste, ist, dass man jedem Lehrer lediglich einen Schlüssel zuordnen kann bzw. jedem Schlüssel nur einen Lehrer.
Bzw. man kann zwar mehrere zuordnen, nur kann man diese Schlüssel/Lehrer leider nicht getrennt voneinander aufrufen. Wäre sehr wichtig, wenn der Hausmeister z.B. gucken möchte, welche Lehrer alle den Biosaal-Schlüssel haben. Habs schon auf mehrere Arten versucht.
Eine davon: Ich habe eine Listbox mit angelegt (auf das vierte Formblatt) und dies auf invisible gemacht. Dann hab ich den Befehl gegeben, dass alles was in die Memos geschrieben wird, in die Listboxen übertragen wird und von wollte dies dann von dort aus speichern, in dem ich den Inhalt der Listbox (mit delimetedText) einem String zuordne. Das hatte soweit funktioniert (bis auf die Groß- und Kleinschreibung). Bei der Suche wollte ich die Daten dann wieder aus dem String raus holen, was aber nicht funktionierte. Deswegen hab ich dann erstmal alles wieder rückgängig gemacht.
Hoffe, das hat jetzt jeder verstanden .
_________________ Habt bitte Geduld, bin nur eine Anfängerin...
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 04.09.05 19:33
- man sollte das formular nicht vergrößern können.
- Alles sehr großzügig aufgebaut vielleicht etwas kompackter machen
- wenn man auf einen button klickt wird das formular zurückgesetzt ?
- das programm sollte mit "Datensatz anlegen" anfangen
- Vielleicht etwas benutzerfreundlicher machen, so leicht steigt man da net durch
- Statt Memos lieber Listboxen verwenden
- Schlüssel sollte man selbst erstellen und dann einem Leherer zB per Combobox zuweisen können
- Beim Suchen kommt immer Suchbegriff nicht vorhanden
- Liegt wohl daran, dass neu angelegte datensätze nicht gespeichert werden
- Alles andere funzt auch irgendwie net so recht
|
|
jakobwenzel
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: So 04.09.05 19:43
Die Comilierte Version bleibt bestehen. Beim Starten wird das Programm in den Speicher geladen. Danach wird der Maschinencode ausgeführt. Die Variablen werden im Arbeitsspeicher gespeichert. Wenn die Variablen gespeichert werden sollen, muss eine Datei erstellt werden, in die dann die Variablen geschrieben werden. Beim Laden muss die Datei dann geöffnet werden, und die Variablen werden gelesen.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
BasicMan33
Beiträge: 54
Win 95, Win XP
D7
|
Verfasst: So 04.09.05 20:20
Hab mir den Code zwar noch nicht angeschaut, aber kann es sein, dass das Programm
nach Beendigung im Hintergrund als Task weiterläuft? Ist zumindest bei mir so.
Wie schaffst du es bloß, zu wissen, welche Bezeichnung wohin gehört.
Ich bin etwas faul und wollte jetzt nicht die einzelnen Buttons umbenennen *g*
Zuletzt bearbeitet von BasicMan33 am So 04.09.05 20:25, insgesamt 1-mal bearbeitet
|
|
adfontes
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: So 04.09.05 20:20
joa, ich würde es wohl so machen...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| Type A = record teacher : String[25]; key : array[1..5] of String[15]; sig : String[3]; end;
var f : file of A; group : A;
group.teacher := Edit??.Text; group.key[1] := Edit??.Text; if Edit.??.Text<>'' then group.key[2] := Edit??.Text; if Edit.??.Text<>'' then group.key[3] := Edit??.Text; group.sig := Edit??.Text
AssignFile (f,(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+'Save.dat')); if filesize(f) = 0 then begin rewrite(f); write(f,group); end else begin seek(f,filesize(f)); write(f,group); end; closefile(f);
AssignFile (f,(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+'Save.dat')); reset(f) while not eof(f) do begin read(f,group); end; closefile(f); |
hab das jetzt einfach mal so aus dem kopf hingekrizelt, aber sollte eigentlich so funktionieren, wenn auch nicht so doll, aber naja, bin ja selbst noch anfänger
ich denke mal das sollte dir für den anfang weiterhelfen (hoff ja mal nicht, dass es schon bissel zu viel hilfe war ^^
greetz
adfontes
// edit: ist bei mir auch so, dass das weiterläuft im hintergrund ^^
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 04.09.05 20:24
bei mir auch, auch als er das bild net findet
|
|
adfontes
Beiträge: 82
Win7 (64bit), WinXP
Delphi 2010 Prof, Delphi XE2 (Trial)
|
Verfasst: So 04.09.05 20:28
wenn du die farbe siehst, denkst du auch an deine signatur F34r0fTh3D4rk "it's not a bug, it's a feature"
(sorry, aber musst ich ma loswerden ... mag lila net so, sorry (wird dem hausmeister glaub ich auch so gehn))
greetz
adfontes
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 05.09.05 15:19
ich gucks mir vielleicht noch mal an wenn es "richtig" fertig ist, also wirklich macken und schmierfrei auch ohne die kleinen schönheitsfehler und ohne gay-hintergrund
|
|
Knedcox
Beiträge: 79
|
Verfasst: Mo 05.09.05 18:18
Hui, das sind ja viele Meinungen und Tipps und Kritiken. Ich fang mal ganz vorne an...
Zum Beitrag von F34r0fTh3D4rk:
Versetz dich mal in den Hausmeister. Wahrscheinlich legt er am Anfang alle Daten komplett an und braucht den Menüpunkt "Neu anlegen" danach fast nie wieder. Im Vordergrund des Programms steht die Suche, denn dafür wird er es nutzen.
Außerdem hat mein 40-jähriger Vater schon Probleme damit, kleinere Buttons und Schriftzüge auf dem PC zu entziffern. Mein 50-jähriger brilletragender Hausmeister weiß die Übersichtlichkeit wahrscheinlich zu schätzen.
Apropo Übersichtlichkeit: Wie würdest du es denn noch benutzerfreundlicher aufbauen?? Für gute Tipps bin ich immer offen.
Komisch das es bei dir nicht funktioniert, bei mir geht so weit alles.
Zum Beitrag von jakobwenzel:
Danke für die Erläuterung zum Thema speichern. Theorie hab ich soweit verstanden, aber wie setzt man das in die Praxis um?
Ja, BasicMan33, das kann sein. Wüsste aber überhaupt nicht, wie ich das abstellen kann (das mit dem Task der weiterläuft)?
Merci adfontes, für den Tipp mit dem Code. Werd das gleich morgen oder so mal ausprobieren. Hab leider nicht mehr so viel Zeit, weil heut die Schule wieder angefangen hat .
Und zu guter letzt noch mal unser Lieblingsthema: die FARBE.
Ich hab wie schon mal gesagt mindestens eine Stunde an dem Programm gesessen, bis ich die Farbe hatte. Rot ist zu aggressiv, blau zu kalt, grün erinnert an AOK (DEVK, usw.), gelb geht überhaupt nicht, und rosa war dann echt zu schwul.
Anstatt die ganze Zeit die Farbe zu kritisieren, könnt ihr ja mal einen Vorschlag machen, welche besser wäre.
_________________ Habt bitte Geduld, bin nur eine Anfängerin...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 05.09.05 19:26
Auch die GUI gehört zum Programm. Es kommt ja auch auf den äußeren Eindruck an. Und as könnte ich mir vorstellen, dass dein Lehrer da auch etwas schief gucken wird, wenn es so ein lia da sieht. Und glaubst du, der Hausmeisetr hat den gleichen Geschmack wie du? Wenn es nicht nur euin Programm für dich persönlich ist, dann nimm lieber was neutrales.
Zum Speichern: ja iszt dir denn nie beim Testen aufgefallen, dass alle Daten wieder weg sind, wenn es wwieder startest? So lange du die Daten nicht hardgecodet in deinem Quelltext stehen hast, wirst du nicht umhinkommen, die eingegebenen Daten permananet irgendwo auf der Festplatte zu speichern.
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 05.09.05 20:02
Zitat: |
Mein 50-jähriger brilletragender Hausmeister weiß die Übersichtlichkeit wahrscheinlich zu schätzen.
|
übersichtlich würde ich net unbedingt sagen, weil für alles buttons zu nehmen ist net so schick, groupboxen wären auch noch gut und vielleicht tabsheets
|
|
jakobwenzel
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mo 05.09.05 20:06
Zum Speichern:
Für dein Problem dürfte es gut funktionieren die Daten als normal lesbare Dateien abzuspeichern, wobei Lehrer, Abkürzung und Schlüssel durch ein Trennzeichen wie "|" ("AltGr" + "Größer/Kleiner - Als - Taste") getrennt werden. Also sähe eine Zeile ungefähr so aus:
Quelltext 1:
| Herr Meier|MR|Informatikraum |
Als erstes wird eine Variable benötigt, über die auf die Datei zugegriffen wird. Im Beispiel heißt sie Datei vom Typ Textfile. Über AssignFile kann man die Datei öffnen. Dabei muss einmal die Dateivariable angegeben werden, gefolgt von dem Dateinamen. Hier empfehlen sich auch wieder relative Pfade, damit das Programm auf allen Rechnern läuft. Danach muss die Datei entweder mit ReWrite oder mit Reset auf das Schreiben/Lesen vorbereitet werden. Beide Prozeduren erwarten die Datei als Parameter. Am End muss die Datei dann auch wieder geschlossen werden, bei geschriebenen Daten ist das besonders wichtig, da sie sonst nicht gespeichert werden.
Das Eigentliche Lesen bzw. Schreiben geschieht über die Prozeduren ReadLn und WriteLn. Beide erwarten als ersten Parameter die Dateivariable. Als zweiten Parameter erwartet WriteLn den zu schreibenden Text, ReadLn muss als zweiter Parameter eine String-Variable übergeben werden, in die die Daten gelesen werden. Mit EOF prüft man, ob sich noch weitere zu lesende Daten in der Datei befinden. EOF gibt einen Boolean-Wert zurück. Wenn der Wert true ist, dann ist das Dateiende erreicht.
Die Daten müssen beim Speichern einfach alle nacheinander an die Prozedur WriteLn übergeben werden. Beim laden ist zu beachten, dass die einzelnen Abschnitte der Zeile unteerschiedlich lang sein können. Zum trennen der Zeile hier ein Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.ReadFromFile; var i:Integer lehrer,abkuerzung,schluessel:String; zeile:String; abschnitt:Integer; /0 bei Lehrer, 1 bei Abkürzung, 2 bei Schlüssel begin [...] while not EOF(Datei) do begin ReadLn(datei,zeile); abschnitt:=0; lehrer:=''; abkuerzung:=''; schluessel:=''; for i:=1 to Length(zeile) do begin if zeile[i]='|' then Inc(Abschnitt) else begin if Abschnitt=0 then lehrer:=lehrer+zeile[i] else if Abschnitt=1 then abkuerzung:=abkuerzung+zeile[i] else schluessel:=schluessel+zeile[i]; end; end; end; [...] end; |
Anstatt des Kommentars "Hier müssen dann..." muss dann der Code geschrieben werden, um die Daten in deinen Variablen wie beim Eingeben abzuspeichern.
P.S.:Ich verwende keine Streams, weil ich mit denen einfach nicht klarkomme (vielleicht liegt es daran, dass ich mit Turbo Pascal angefangen habe )
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
|