AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Entwicklung für Vista und XP

Ein Thema von choose · begonnen am 21. Jul 2006 · letzter Beitrag vom 3. Apr 2007
Antwort Antwort
Seite 4 von 10   « Erste     234 56     Letzte »    
MathiasSimmack
(Gast)

n/a Beiträge
 
#31

Re: Entwicklung für Vista und XP

  Alt 26. Jul 2006, 18:08
Okay, grundsätzlich hätte ich den Artikel fertig. Das einzige Problem ist momentan die Checkbox. Das Erzeugen derselben und das Reagieren in der Callback-Funktion ist kein Ding. Der Rückgabewert ist das, womit ich zurzeit Schwierigkeiten habe. Hier die Original-Deklaration:
Code:
HRESULT TaskDialogIndirect(
    const TASKDIALOGCONFIG *pTaskConfig,
    int *pnButton,
    BOOL *pfVerificationFlagChecked
);
Der letzte Parameter ist ein Zeiger auf einen bool-Wert. Lt. SDK ist dieser Wert TRUE, wenn der Haken in der Checkbox gesetzt war, und FALSE, wenn er das nicht war. Irgendwie klappt das nur nicht. Wenn ich die Variable initialisiere (mit FALSE), dann erhalte ich grundsätzlich auch FALSE zurück. Wenn ich die Variable nicht initialisiere, dann liefert die Funktion TRUE, selbst wenn ich gar keine Checkbox im Dialog nutze. Irgendwo ist da noch der Wurm drin.

Soll ich den Artikel trotzdem erst mal veröffentlichen? Das Thema Checkbox würde ich ausklammern, und wir reden darüber, wenn Artikel und Demo online sind.
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#32

Re: Entwicklung für Vista und XP

  Alt 26. Jul 2006, 18:18
Zitat von MathiasSimmack:
Soll ich den Artikel trotzdem erst mal veröffentlichen? Das Thema Checkbox würde ich ausklammern, und wir reden darüber, wenn Artikel und Demo online sind.
JUpp, mach das und schreib einen Hinweis, dass das Thema CheckBox später kommt.
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#33

Re: Entwicklung für Vista und XP

  Alt 26. Jul 2006, 21:11
Und hier der versprochene Artikel; http://www.michael-puff.de/Developer...skDialog.shtml
Auch wenn es nirgens steht, Mathias ist der Autor und übernimmt somit die volle Verantwortung. Fragen bitte an Mathias richten.

(Tippfehler bitte an mich per PN.)

@Mathias: Als PDF hast du da snicht noch zufällig vorliegen? Wie ich hier: http://www.michael-puff.de/Developer...ortEvent.shtml (Oben rechts.)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#34

Re: Entwicklung für Vista und XP

  Alt 27. Jul 2006, 05:24
Müsste ich bei Gelegenheit mal zusammenbauen.
Aber was ist denn eigentlich aus meinem schönen Delphi-Stylesheet geworden?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#35

Re: Entwicklung für Vista und XP

  Alt 27. Jul 2006, 12:49
Der wird noch benutzt. Ich habe nur meinen Stylesheet für die Codeblöcke benutzt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#36

Re: Entwicklung für Vista und XP

  Alt 27. Jul 2006, 16:56
Das Problem ist nur, dass dein Stylesheet nichts mit meinen Klassenangaben anfangen kann. Wenn du das wieder korrigieren könntest, wäre ich dir dankbar. Notfalls passe ich die Farben in der "delphi8.css" an deine Vorgaben an, aber ich formatiere den Quellcode nun mal mit meinem Tool.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#37

Re: Entwicklung für Vista und XP

  Alt 6. Aug 2006, 14:15
Ich habe mal mit einer CSharp-Klasse für den einfachen TaskDialog (nicht TaskDialogIndirect!) angefangen. Die Anwendung ist ähnlich wie die MessageBox. Vom einfachen Aufruf nur mit dem Inhalt bis hin zum kompletten Aufruf inkl. Titel, Buttons, usw. Nur mit dem Symbol habe ich noch Probleme. Grundsätzlich sieht die Deklaration so aus:
Code:
[DllImport(Win32Libraries.ComCtl32, CharSet = CharSet.Auto, SetLastError = true)]
internal static extern void TaskDialog(
          IntPtr hwndParent,
          IntPtr hInstance,
          string pszWindowTitle,
          string pszMainInstruction,
          string pszContent,
          TaskDialogButtons dwCommonButtons,
          string pszIcon,
          [In,Out] ref int pnButton);

/* ... */


public enum TaskDialogIcon
{
   Blank = 100,
   Warning,
   Question,
   Error,
   Information,
   BlankAgain,
   Shield
}
Wenn ich aber, ähnlich wie bei Delphi, den Icon-Wert in einen String umwandle, dann erscheint der Dialog nicht. Nur wenn ich null nehme, klappt es. Anbei mal der Code der Show()-Methode mit allen Parametern, weil hier der eigentliche Aufruf des Dialogs drin steckt:
Code:
public static TaskDialogResult Show(IntPtr hwndParent, IntPtr hInstance,
   string content, string dialogTitle, string mainInstruction,
   TaskDialogButtons buttons, TaskDialogIcon icon)
{
   if (!SupportedOS.IsWindowsVistaOrHigher())
   {
      throw new NotSupportedException
         ("Your operating system does not support this dialog.");
   }
   int dialogResult = 0;

   NativeMethods.TaskDialog
      (hwndParent,
       hInstance,
       dialogTitle,
       mainInstruction,
       content,
       buttons,
       GetIconValue(icon),
       ref dialogResult);
   return (TaskDialogResult)dialogResult;
}

static string GetIconValue(TaskDialogIcon icon)
{
//   return ((int)icon).ToString();
   return null;
}
Die Funktion "GetIconValue" würde also den numerischen Wert von TaskDialogIcon liefern. Etwa 104 für Information. Also in etwa nach dem Prinzip, was
MAKEINTRESOURCEW(104) bei der Delphi-Version machen würde. Aber das klappt nicht. Wo liegt mein Denkfehler?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#38

Re: Entwicklung für Vista und XP

  Alt 6. Aug 2006, 15:07
Zitat von MathiasSimmack:
bei der Delphi-Version machen würde. Aber das klappt nicht. Wo liegt mein Denkfehler?
Dein Denkfehler ist, das du den String "104" übergibst, anstatt dem Integer 104.
Du bräuchtest im Import nicht einmal string als typen nehmen sondern einfach direkt TaskDialogIcon.
Sicherheitshalber könntest du TaskDialogIcon so deklarieren, dass es von Int32 "ableitet", aber wirklich nötig sollte das nicht sein. Enum sind ja per default 32Bit-Integer.
Ungetestet, aber es sollte so gehen:
Code:
[DllImport(Win32Libraries.ComCtl32, CharSet = CharSet.Auto, SetLastError = true)]
internal static extern void TaskDialog(IntPtr hwndParent,
                                       IntPtr hInstance,
                                       string pszWindowTitle,
                                       string pszMainInstruction,
                                       string pszContent,
                                       TaskDialogButtons dwCommonButtons,
                                       [MarshalAs(UnmanagedType.LPWStr)]
                                       TaskDialogIcon pszIcon,
                                       [In, Out]
                                       ref int pnButton);


public enum TaskDialogIcon : int
{
    Blank = 100,
    Warning,
    Question,
    Error,
    Information,
    BlankAgain,
    Shield
}
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#39

Re: Entwicklung für Vista und XP

  Alt 6. Aug 2006, 15:35
Die Anregung war prima. Ich musste tatsächlich den (Feld)Marshal bemühen, allerdings so:
Code:
[DllImport(Win32Libraries.ComCtl32, CharSet = CharSet.Auto, SetLastError = true)]
internal static extern void TaskDialog(
   IntPtr hwndParent,
   IntPtr hInstance,
   string pszWindowTitle,
   string pszMainInstruction,
   string pszContent,
   TaskDialogButtons dwCommonButtons,
   [MarshalAs(UnmanagedType.U4)]
   TaskDialogIcon pszIcon,
   [In,Out] ref int pnButton);
Jetzt funktioniert es.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#40

Re: Entwicklung für Vista und XP

  Alt 6. Aug 2006, 19:38
Ich wollte übrigens noch verraten, dass sich das Rätsel mit der Checkbox auch erledigt hat. Wollt ihr wirklich den Grund wissen? Der typische Fall von "die rechte Hand weiß nicht was die linke macht". Rechte und linke Hand sind in dem Fall die Doku-Schreiber und die Programmierer bei Microsoft. Im SDK und im MSDN steht die Deklaration von "TaskDialogIndirect" so drin, wie ich es hier gezeigt habe. Tatsächlich fehlt da aber noch ein PInteger für die Radiobuttons:
Code:
HRESULT TaskDialogIndirect(
    const TASKDIALOGCONFIG *pTaskConfig,
    int *pnButton,
    int *pnRadioButton,
    BOOL *pfVerificationFlagChecked
);
Dadurch verschiebt sich der Parameter zum Prüfen der Checkbox um eine Stelle, und siehe da: nun klappt es. Und wo habe ich das gefunden? In einem CSharp-Sample im Windows SDK.


Aktuelles Projekt und aktueller Artikel liegen schon bei Luckie im Postfach und werden sicher auch bald online gehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 10   « Erste     234 56     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz