Autor |
Beitrag |
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mi 21.11.12 16:50
Hallo allerseits !
ich bin definitiv kein Profi im Programmieren. Deshalb meine Frage an Euch Profis: Wie könnte ich den folgenden Code noch deutlich verbessern -->
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Procedure TFrmChild.SaveToFile(S: String); Begin RichEdit1.Cursor := crHourGlass; RichEdit1.PlainText := True; Try RichEdit1.Lines.SaveToFile(S); RichEdit1.Modified := False; Finally RichEdit1.Cursor := crDefault; End; End; |
Hochhaus
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 21.11.12 17:14
Moin!
Hochhaus hat folgendes geschrieben : | Wie könnte ich den folgenden Code noch deutlich verbessern |
Das hängt doch im Wesentlichen davon ab, was du für ein Ziel erreichen möchtest.
Ausser einem try-except um das .SaveToFile() sehe ich da erstmal nix dringend fehlendes.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mi 21.11.12 17:25
Das Folgende möchte ich speziell abfangen können: Ein ReadOnly-Attribut auf der zu speichernden Datei, ein Schreibschutz auf dem Laufwerk oder fehlende Berechtigungen.
Grüsse,
Hochhaus
|
|
Ralf Kaiser
Hält's aus hier
Beiträge: 9
Erhaltene Danke: 3
Delphi XE2
|
Verfasst: Mi 21.11.12 20:25
Hochhaus hat folgendes geschrieben : |
Halli Hallo,
Kleine Verbesserung beim Handling des Cursors. So kann kann man die Funktion von anderen Funktionen aus aufrufen die selbst einen eigenen Cursor setzen.
Ist nur ein kosmetische "Vebesserung"...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Procedure TFrmChild.SaveToFile(S: String); var lPrevCursor: TCursor; Begin lPrevCursor := Screen.Cursor; Screen.Cursor := crHourGlass; RichEdit1.PlainText := True; Try RichEdit1.Lines.SaveToFile(S); RichEdit1.Modified := False; Finally Screen.Cursor := lPrevCursor; End; End; | |
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 21.11.12 21:19
Hallo,
Hochhaus hat folgendes geschrieben : | Ein ReadOnly-Attribut auf der zu speichernden Datei, ein Schreibschutz auf dem Laufwerk oder fehlende Berechtigungen. |
Das Readonly-Attribut bekommst Du über die Einstellung im Savedialog. Ich vermute, dass Du einen verwendest.
Zur Frage Schreibschutz oder fehlende Berechtigung verwende ich folgende Funktion zum Test auf Administratorrechte:
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: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| function IsAdmin: Boolean; const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; var hAccessToken : THandle; ptgGroups : PTokenGroups; dwInfoBufferSize : Cardinal; psidAdministrators : PSID; x : Integer; begin Result := false; if Win32Platform <> VER_PLATFORM_WIN32_NT then begin result:=true; Exit; end; if not OpenThreadToken(GetCurrentThread, TOKEN_QUERY,TRUE, hAccessToken) then begin if GetLastError <> ERROR_NO_TOKEN then Exit; if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,hAccessToken) then Exit; end; try GetTokenInformation(hAccessToken, TokenGroups, nil,0, dwInfoBufferSize); if GetLastError <> ERROR_INSUFFICIENT_BUFFER then Exit; GetMem(ptgGroups, dwInfoBufferSize); try if not GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, dwInfoBufferSize, dwInfoBufferSize) then Exit; if not AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators) then Exit; try for x := 0 to ptgGroups^.GroupCount - 1 do begin if EqualSid(psidAdministrators, ptgGroups^.Groups[x].Sid) then begin Result := true; Break; end; end; finally FreeSid(psidAdministrators); end; finally FreeMem(ptgGroups); end; finally CloseHandle(hAccessToken); end; end; |
Der Code ist nicht von mir. Irgendwo habe ich ihn mal gesehen.
Bis jetzt hat er bei mir funktioniert. Ob das unter Windows 8 noch geht, weiß ich nicht.
Vielleicht hilft es ja etwas.
Beste Grüße
Mathematiker
Nachtrag: Ich habe gerade festgestellt, dass der Quelltext in der EE unter www.entwickler-ecke....mp;highlight=isadmin genauso steht. Wahrscheinlich noch öfters.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Für diesen Beitrag haben gedankt: Delphi-Laie, Hochhaus
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mi 21.11.12 23:49
Tja, das ist das Wesen aller kulturellen Güter aller Kulturen und Gesellschaft(sordnung)en: Es wird überwiegend kopiert (und mithin tradiert), zum Glück im erheblichen Maße bewährtes (leider aber bei weitem nicht nur bewährtes, und teilweise wird umgekehrt bewährtes von Schlaumeiern und Besserwissern wieder über Bord geworfen). Das ist schließlich ein, wenn nicht das Erfolgsrezept (-geheimnis?) der Menscheit.
So auch der Test, ob man Administrator ist. Das ist lässig und wird von mir wahrscheinlich bald in mein(e) Sortierkino(s) eingebaut werden, damit das/die auch bei den bemitleidenswerten Nicht-Adminstratoren in voller Funktionalität funktionert/funktionieren.
Zuletzt bearbeitet von Delphi-Laie am Do 22.11.12 11:32, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: Hochhaus
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 22.11.12 10:55
Vergleicht Ihr nicht gerade ein wenig Äpfel mit Birnen? Schreibschutz oder Zugriffsverweigerung haben ja nicht zwingend mit Benutzerrechten zu tun. Auch als Admin kann ich keine Datei auf der CD der letzten Computerbild speichern, genausowenig wie ich eine exklusiv geöffnete Datei überschreiben kann.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Do 22.11.12 11:36
Äpfel kann, ja muß man sehr wohl (auch) mit Birnen vergleichen, ansonsten könnte man sie gar nicht voneinander unterscheiden. Soviel zu dieser abgedroschenen und m.E. falschen Metapher, die genauso gedankenlos wie inflationär verwandt wird.
Richtig ist natürlich der Einwand, daß das zwei verschiedene Dinge sind, allerdings gibt es natürlich eine "gewisse Schnittmenge", nämlich in der Menge, daß Schreibrechte (jedenfalls bei potentiell beschreibbaren Datenträgern/Dateisystemen) an Benutzerkonten gekoppelt werden können.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 22.11.12 11:52
Natürlich können sie das. Allerdings kann man auch dem Admin Rechte entziehen, so dass nur noch z.B. Benutzer einer bestimmten Gruppe Schreibzugriff haben. In dem Fall nützt dann auch die Prüfung auf Administratorrechte nichts. Von daher bin ich der Meinung, dass man den Schreibversuch einfach durch einen try-except-Block absichern und im Exception-Fall deren Meldung ausgeben sollte. Wenn man alle in Frage kommenden Möglichkeiten abprüfen möchte (schreibgeschützter Datenträger, Datenträger voll, exklusiver Dateizugriff, fehlende Benutzerrechte usw.), wird man damit auf Dauer bestimmt nicht glücklich.
Für diesen Beitrag haben gedankt: Delphi-Laie, Hochhaus
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Di 27.11.12 23:52
Mathematiker hat folgendes geschrieben : | Der Code ist nicht von mir. Irgendwo habe ich ihn mal gesehen. |
Könnte von [url= www.delphi-fundgrube...faq13.htm#topic1315]hier[/url] stammen.
|
|