Autor Beitrag
Hochhaus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: 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 -->

ausblenden 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{* SaveToFile *}



Hochhaus
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 21.11.12 17:14 
Moin!

user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:

Ausser einem try-except um das .SaveToFile() sehe ich da erstmal nix dringend fehlendes. :lupe:

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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: 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
BeitragVerfasst: Mi 21.11.12 20:25 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:


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"...

ausblenden 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;  // aktuellen Cursor sichern
     Screen.Cursor := crHourGlass;  // Wartecursor setzen
     RichEdit1.PlainText := True;
     Try
       RichEdit1.Lines.SaveToFile(S);
       RichEdit1.Modified := False;
     Finally
       Screen.Cursor := lPrevCursor;  // Vorherigen Cursetz zurückholen
     End;
End{* SaveToFile *}

Für diesen Beitrag haben gedankt: Hochhaus
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 21.11.12 21:19 
Hallo,
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden volle Höhe 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:
50:
51:
52:
53:
54:
55:
56:
57:
58:
function IsAdmin: Boolean;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
    (Value: (000005));
  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,
             000000, 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 27.11.12 23:52 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
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.