Announcement

Collapse
No announcement yet.

Pointer?-Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Pointer?-Problem

    Hallo,

    ich bekomme beim Aufruf einer Funktion eine "access violation" an den Bildschirm geschmissen.

    Die Funktion (abgekürzt) sieht so aus:

    function bla(...; var pFont: LOGFONT);

    Mein Aufruf:
    var pf : LOGFONT;
    bla(..., pf);

    Reichen die Infos?
    Was mache ich falsch?

    Michael

  • #2
    Hallo Michael,

    nö reichen nicht.

    Wolfgan

    Comment


    • #3
      Hmm,

      also die benötigte Funktion ist von der DLL "uxtheme.dll". Sie nennt sich "GetThemeFont".

      Nehmen wir aber mal "GetThemeSysFont".<br><br>

      <hr>
      In der MSDN steht folgendes:<br><br>

      HRESULT GetThemeSysFont(
      <blockquote>
      HTHEME hTheme,<br>
      int iFontID,<br>
      LOGFONT *plf
      </blockquote>
      );<br><br>

      <i>plf</i><br>
      Pointer to a <b>LOGFONT</b> structure that receives the font information from this function.<hr><br>

      Also Englisch ist nicht mein "Ding" aber es geht irgendwie um ein Pointer. Da muss man irgendwie Speicher reservieren wegen der EAccessViolation Fehlermeldung.<br><br>

      So soll das in Delphi aussehen:<br>
      function GetThemeSysFont(hTheme: HTHEME; iFontId: Integer; var plf: LOGFONT): HRESULT; stdcall;<br><br>

      <b>Ich versuche es so:</b><br>
      Var pf : LOGFONT;<br>
      GetThemeSysFont(0,801,pf);<br><br>

      Leider EAccessViolation<br><br>

      Mit "New(pf);" geht das nicht. Da müsste ich ja "var pf: pLOGFONT;" nehmen aber das geht genauso wenig.<br><br>
      Jetzt genügend Infos?<br>
      Hoffe auf eine Lösung von Euch.<br>
      <br>Michae

      Comment


      • #4
        Du hast kein Problem mit der Alloziierung.<br>
        Was bedeuten die anderen Parameter? Vielleicht versuchst du Fontinformationen von etwas abzurufen was keine hat. Der AV ist dann nicht der Zugriff auf pf sondern auf die nicht vorhandene Quellinformation

        Comment


        • #5
          Hier mal die ganze Info-Seite von der MSDN für "GetThemeSysFont":<br><br>

          http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/functions/getthemesysfont.asp
          <br><br>

          Ich hoffe es kann noch jemand weiterhelfen, damit ich diese Funktion (auch "GetThemeFont")benutzen kann.

          Michae

          Comment


          • #6
            Sieht alles gesund aus. Kein Fehler sichtbar

            Comment


            • #7
              Ich habe jetzt nochmal etwas getestet und mir ist aufgefallen das es nicht *direkt* an der Funktion "GetThemeSysFont" liegt.<br><br>

              Folgendes:<br>
              Ich benutze auch weitere Funktionen wie z.B.:<br>
              OpenThemeData<br>
              CloseThemeData<br><br>

              Benutzte ich "GetThemeSysFont" dann bekomme ich den Fehler "EAccessViolation" bei "CoseThemeData". Diese Funktion benötige ich aber. Ist alles etwas kompliziert denn "CloseThemeData" geht wiederrum wenn ich "GetThemeSysFont" nicht nehme.<br><br>

              Mit gehts eigentlich darum:<br><br>

              WinXP / Start / Ausführen ... ein Dialog-Fenster kommt ... die dort enthaltenen Texte, dass Drop-Down Feld und die Texte in den Schaltflächen benutzen eine Schriftart. Es ist nicht die, wie gewohnt die "MS Sans Serif" (liegt an der Cleartyp Einstellung) sondern eine andere. Schalte ich "Cleartyp" ab, dann ist es die "Ms Sans Serif". Mein Program soll sich natürlich hier auch richtig anpassen und ich frage mich, wie ich an diese Information komme damit ich die richtige Schriftart und auch (ich frage mich noch wie) die Schriftgröße herausbekomme. Aus der registry will ich eigentlich keine daten hierzu lesen. Ich denke da es sich um Windows XP handelt (wegen verschiedenen XP-Theme Möglichkeiten), bin ich mit "GetThemeSysFont" und "GetThemeFont" auf dem richtigen Weg nur es geht einfach nicht. Vielleicht kann mir da jemand ein Gerüst bauen. In der MSDN steht ja alles über die "uxtheme.dll" (siehe dazu den oberen Link meiner vorherigen Nachricht). Ich bekomme das einfach nicht hin.<br><br>
              Michae

              Comment


              • #8
                Hast du dir den ThemeManager von Mike Lischke angesehen

                Comment


                • #9
                  Ja kurz mal.
                  wegen "getthemefont" bzw. "getthemesysfont" habe ich aber noch nicht nachgeschaut.
                  Aber ein Dakeschön für den Tipp.

                  Michae

                  Comment

                  Working...
                  X