Entwickler-Ecke
Open Source Projekte - Programm für unseren Hausmeister
Knedcox - So 04.09.05 17:55
Titel: Programm für unseren Hausmeister
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.
adfontes - So 04.09.05 18:00
Titel: Re: Programm für unseren Hausmeister
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 - 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.
jakobwenzel - So 04.09.05 18:21
Habs mir mal angeguckt :shock:
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.
adfontes - So 04.09.05 18:25
jakobwenzel hat folgendes geschrieben: |
Habs mir mal angeguckt :shock:
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 - 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.
adfontes - 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. |
:gruebel: wenn ich jetzt wüsste was du damit meinst oO
greetz
adfontes
jakobwenzel - 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 :lol: :lol: :lol:
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.
Knedcox - 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 :wink: .
F34r0fTh3D4rk - 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 :roll:
jakobwenzel - 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.
BasicMan33 - 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. :shock:
Ich bin etwas faul und wollte jetzt nicht die einzelnen Buttons umbenennen *g*
adfontes - So 04.09.05 20:20
joa, ich würde es wohl so machen...
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: 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 - So 04.09.05 20:24
bei mir auch, auch als er das bild net findet :lol:
adfontes - 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 - Mo 05.09.05 15:19
ich gucks mir vielleicht noch mal an wenn es "richtig" fertig ist, also wirklich macken und schmierfrei 8) auch ohne die kleinen schönheitsfehler und ohne gay-hintergrund ;)
Knedcox - 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 :cry: .
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.
Delete - 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 - 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 :wink:
jakobwenzel - 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 :lol: )
Narses - Mi 07.09.05 19:34
Moin!
Hier ein Vorschlag, wie man sowas lösen könnte. Hinweis: vieles geht mit Drag&Drop, einfach ausprobieren.
cu
Narses
Gothicware - Mi 07.09.05 23:29
Hab mir das Projekt noch nicht angeschaut, werd ich aber morgen tun.
Was mich stört:
- Archiv hat ein Umlaut im Namen (im Web sollte man beim Standart Zeichen bleiben)
Zum Thema Farbe.
Als Microdoof 16Farben als "Normal" angesehen haben, war die Standart Windoof Farbe clGray;
Später wollte Microdoof auch eine andere Farbe haben, und hat rum forschen lassen.
Was kam Raus? Warmes Grau. :P
Und nach dieser Weisheit benutze ich die Regel: rgb 212, 208, 200, um Insgesamt max 32 zu ändern. Somit nur ein ganz leichten "bunten" Grauton zugeben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!