Hallo Community,
ich brauche mal wieder einen kleinen Denkanstoß.
Und zwar lade ich in meinem Programm Frames zur Laufzeit, da es einfach zu viele währen, um diese alle per Visible:=TRUE; sichtbar zu machen.
Bisher habe ich das ganze folgendermaßen gelöhst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm_Haupt.MenueItemClick(Sender: TObject; Item: String); begin FFrame.Free; FFrame:=NIL; if item = 'Benutzerverwaltung' then begin FFrame:=TFrame_Benutzerverwaltung.Create(Self); FFrame.Left:= 112; end;
if item = 'Kunden' then begin FFrame:=TFrame_Kunden.Create(Self); FFrame.Left:= 112; end; if Assigned(FFrame) then FFrame.Parent:=Self; end; |
Das ganze funktioniert auch ganz wunderbar. Da das Auswahlmenü jedoch ein paar mehr Einträge als nur die zwei erhält und ich nicht für jede Auswahl ne Extra If-Abfrage machen wollte habe ich das ganze mal in zwei Proceduren unterteilt.
Jetzt sieht das ganze so aus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm_Haupt.MenueItemClick(Sender: TObject; Item: String); begin FFrame.Free; FFrame:=NIL;
anwendung:= item; get_permissons;
FFrame:= framename; FFrame.Left:= 112;
if Assigned(FFrame) then FFrame.Parent:=Self; end; |
anwendung ist vom Typ String und speichert den jeweiligen Ausgewählten Menüpunkt in einer globalen Variable zwischen.
Die Procedure get_permission ließt aus einer IB-Datenbank dem jeweiligen Framename und die Gruppen die Zugriff auf die Anwednung haben aus und speichert diese dann ebenfalls in Globalen Variablen zwischen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure get_permissons; begin Form_Haupt.IBQuery_Einlesen.SQL.Clear; Form_Haupt.IBQuery_Einlesen.SQL.Add('select FRAME_99, SCHREIBEN_99, LESEN_99 from ANWENDUNGEN_99 where NAME_99 ="' + anwendung + '"'); Form_Haupt.IBQuery_Einlesen.Open;
framename := Form_Haupt.IBQuery_Einlesen.FieldByName('FRAME_99').AsString + '.Create(Self)'; schreiben := strtoint(Form_Haupt.IBQuery_Einlesen.FieldByName('SCHREIBEN_99').AsString); lesem := strtoint(Form_Haupt.IBQuery_Einlesen.FieldByName('LESEN_99').AsString); end; |
Das Problem an der ganze Sache ist jetzt jedoch das framename von Typ String ist und ich aber bei FFrame:= framename; eine Variable von Typ TFrame benötige. Wenn ich jetzt framename von Typ TFrame deklariere kann ich logischerweise die beiden Strings nicht mehr aneinander kopieren.
Ich hoffe mal ihr versteht einigermaßen was ich meine und habe eventuell ne Lösung für mich wie ich das ganze auf meine Weise lösen kann oder ihr habt vielleicht eine bessere Lösung für mich?
Und da ich nicht wegen jedem Prob nen neues Thema aufmachen will hab ich noch eine Frage zum Thema Tabellennamen in einer IB-Datenbank. Und zwar wollte ich meine Tabellen folgendermaßen benennen 99_ANWENDUNG. Mit der IBConsole kann ich eine solche Tabelle auch ohne weiteres erzeugen. Jedoch kann ich dann von Delphi aus nicht auf diese Tabellen zugreifen das Delphi anscheinet keine Tabellen oder Felder haben will die mit einer Ziffer beginnen. Ist das so korrekt, oder war ich nur zu blöd?
