Salut
- Comment retourner l'écran en plein écran sans bordure par Delphi ?
- Comment contrôler la carte graphique par delphi ?
Merci
Version imprimable
Salut
- Comment retourner l'écran en plein écran sans bordure par Delphi ?
- Comment contrôler la carte graphique par delphi ?
Merci
Salut
Je parle de l'écran et je ne veux pas dire la Form
Merci
Salut
Après le changement de la résolution de l’écran par code Delphi ou manuellement l’écran il est possible de devenir au centre avec deux bandes noir de gauche et de droite, on peut mettre l’écran en plein écran manuellement comme suit :
Propriété de bureau – Options graphiques – Ajustement de l’écran – Plein écran (Sans bordure)
Mais je veux le code Delphi qui fait ça automatiquement
Merci
Tu as je suppose utilisé ChangeDisplaySettings comme dans Comment changer la résolution de l'écran ?
Regarde dmDisplayFixedOutput en DMDFO_STRETCH : Scaling the Desktop Image
Sous XP via DEVMODE de ChangeDisplaySettings
Sous Seven via SetDisplayConfig
Est-ce un écran standard de Windows ?
ou un écran lié à ton driver de Carte Graphique ?
Sous Seven, je n'ai pas du tout le menu dont tu indiques le chemin
le plus proche serait "Panneau de configuration\Apparence et personnalisation\Affichage\Résolution*d’écran", après je ne sais où trouver ton menu
Pense qu'entre écran LCD et CRT, il y a de grosses différentes
Sur un CRT, on changeait assez facilement la résolution, à part, quelques réglages physiques du moniteur c'était assez basique
Sur un LCD, il n'y a qu'une seule résolution naturelle,
soit l'écran affiche une image plus petite,
soit il fait une extrapolation de l'image vers sa résolution naturelle,
souvent le résultat est médiocre avec des polices floues et un inconfort visuel
Du coup, il est préférable que son application même pleine écran s'adapte à l'écran plutôt que l'inverse !
C'est une façon de penser archaïque que de vouloir forcer une résolution !
Il est préférable d'utiliser des grandes fontes ou de grandes icones pour des raisons d'accessibilité ou d'ergonomie
Une politique encouragée par Windows sous RT que les applications s'adaptent auw résolutions très différentes mode tablette ou en mode PC et l'utilisation des images vectorielles et un layout adapté au fonctionnel applicatif.
Salut
J’ai un code Delphi qui peut modifier la résolution d’écran de toute valeur à la valeur 1024*768 pixels sous Windows XP et Seven, mais parfois après le changement le bureau il est possible de devenir au centre de l’écran avec deux bandes noir de gauche et de droite, nous pouvons modifier l’affichage de bureau en plein écran manuellement comme suit selon la carte graphique installée sur chaque ordinateur :
Clique droite avec la souris sur le bureau – Options graphiques – Ajustement de l’écran – Cocher ‘Plein écran (Sans bordure)’
Mais je veux le code Delphi qui fait ça automatiquement tels que le code que je possède peut modifier la résolution de l'écran
Merci
As-tu as essayé le paramètre dmDisplayFixedOutput en DMDFO_STRETCH de ton DEVMODE passé au ChangeDisplaySettings ?
Je trouve que les valeurs sont très similaires entre ce menu (uniquement sous XP *) et le paramètre dmDisplayFixedOutput, on pourait les associer ainsi ?
(*) Pense que nous n'avons pas forcément le même environnement !Citation:
Conserver les Proportions . . . : DMDFO_DEFAULT . . - The display's default setting.
Centrer le bureau . . . . . . . . : DMDFO_CENTER . . . - The low-resolution image is centered in the larger screen space.
Plein Ecran (Sans Bordure) . . : DMDFO_STRETCH . . - The low-resolution image is stretched to fill the larger screen space.
Lorsque tu donnes un chemin de menu, pense à :
- indiquer la version de l'OS : XP, Vista, Seven
- trouver les équivalents dans différentes versions
- à fournir un petit lien vers l'aide microsoft sur ce menu
- ...
Pense aussi à fournir le code que tu utilises, tu nous fait un blabla dans un français approximatif qui n'est pas franchement utile, surtout si tu répètes deux fois la même chose :roll:
S'il n'y a pas d'inconvénient je veux le code si vous savez..Merci
Mes salutations
Sous XP tout va bien mais le problème des bordures reste sous Windows 7 temps que changer la résolution à la valeur 1024 par 768 pixels, une solution SVP
Comment Utiliser SetDisplayConfig en Delphi le code complète SVP?Code:
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 procedure TForm1.FormCreate(Sender: TObject); var i : Integer; DevMode : TDeviceMode; begin i:=0; {$IFOPT R+} {$DEFINE CKRANGE} {$R-} //range-checking of {$ENDIF} while EnumDisplaySettings(nil,i,DevMode) do begin with Devmode do ListBox1.Items.Add(Format('%dx%d %d Colors',[dmPelsWidth,dmPelsHeight,1 shl dmBitsperPel])); Inc(i); end; {$IFDEF CKRANGE} {$UNDEF CKRANGE} {$R+} //range-checking on {$ENDIF} end; procedure TForm1.Button1Click(Sender: TObject); var DevMode : TDeviceMode; liRetValue : Longint; begin {$IFOPT R+} {$DEFINE CKRANGE} {$R-} //range-checking of {$ENDIF} if EnumDisplaySettings(nil,Listbox1.ItemIndex,Devmode) then liRetValue := ChangeDisplaySettings(DevMode,0); SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0); {$IFDEF CKRANGE} {$UNDEF CKRANGE} {$R+} //range-checking on {$ENDIF} case liRetValue of DISP_CHANGE_SUCCESSFUL: ShowMessage('DISP_CHANGE_SUCCESSFUL: The settings change was successful.'); DISP_CHANGE_RESTART : ShowMessage('DISP_CHANGE_RESTART: The computer must be restarted in order for the graphics mode to work.'); DISP_CHANGE_BADFLAGS : ShowMessage('DISP_CHANGE_BADFLAGS: An invalid set of flags was passed in.'); DISP_CHANGE_FAILED : ShowMessage('DISP_CHANGE_FAILED: The display driver failed the specified graphics mode'); DISP_CHANGE_BADMODE : ShowMessage('DISP_CHANGE_BADMODE: The graphics mode is not supported'); DISP_CHANGE_NOTUPDATED: ShowMessage('DISP_CHANGE_NOTUPDATED: Unable to write settings to the registry.'); end; end;
Merci
Mes propos sont théoriques suite à la lecture de l'aide de ChangeDisplaySettings
je te laisse œuvrer pour trouver une solution à TON problème,
j'ai aussi mes problèmes et du travail à faire pour lequel je suis payé !
Si tu veux un devis, c'est 100€/h HT !
J'ai fait une recherche pour TOI, je n'ai jamais été confronté à ce problème,
je t'ai fourni le nom de différente API comme SetDisplayConfig,
je te laisse lire la MSDN à ce sujet et à fouiller sur le net comme le sujet making calls to SetDisplayConfig and QueryDisplayConfig in User32.DLL
Voir plus bas une copie du code
Pense qu'il te faut un Delphi très récent pour avoir cette déclaration de SetDisplayConfig, en D7, tu devrais écrire la séquence LoadLibrary\GetProcAddress et prévoir un code de secours si la fonction n'existe pas
Je note que tu n'as toujours pas essayé dmDisplayFixedOutput, du moins pas dans le code fourni !
Code issu de StackOverflow
Code:
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
59
60
61 function getTopology : DISPLAYCONFIG_TOPOLOGY_ID ; var NumPathArrayElements, NumModeInfoArrayElements : UINT32; var PathArrayElements_Size, ModeInfoArrayElements_Size : UINT32; error : Longint; paths : PDISPLAYCONFIG_PATH_INFO_array; info : PDISPLAYCONFIG_MODE_INFO_array; begin NumModeInfoArrayElements := 0; Result := DISPLAYCONFIG_TOPOLOGY_EXTERNAL; inc(result); error := GetDisplayConfigBufferSizes(QDC_DATABASE_CURRENT,NumPathArrayElements,NumModeInfoArrayElements); case error of ERROR_SUCCESS : begin PathArrayElements_Size := sizeof(DISPLAYCONFIG_PATH_INFO) * NumPathArrayElements ; ModeInfoArrayElements_Size := sizeof(DISPLAYCONFIG_MODE_INFO) * NumModeInfoArrayElements; GetMem(paths,PathArrayElements_Size); try GetMem(info,ModeInfoArrayElements_Size ); try error := QueryDisplayConfig(QDC_DATABASE_CURRENT,NumPathArrayElements, paths,NumModeInfoArrayElements, info,result); case error of ERROR_SUCCESS :; else Result := DISPLAYCONFIG_TOPOLOGY_EXTERNAL; inc(result); end; finally FreeMem(info,ModeInfoArrayElements_Size ); end; finally FreeMem(paths,PathArrayElements_Size); end; end; end; end; function setTopology ( top : DISPLAYCONFIG_TOPOLOGY_ID) : boolean; var flags : dword; begin result := false; flags := DecodeDISPLAYCONFIG_TOPOLOGY_ID_SDC(top); if flags <> 0 then begin result := SetDisplayConfig(0,nil,0,nil,SDC_APPLY or flags) = ERROR_SUCCESS; end; end;
pour avoir cette déclaration de SetDisplayConfig, en D7, tu devrais écrire la séquence LoadLibrary\GetProcAddress et prévoir un code de secours si la fonction n'existe pas
Plus en détail si cela est autorisé :roll:
Merci
Pour le couple LoadLibrary\GetProcAddress voir :faq: Comment appeler une fonction dans une DLL ?
Le problème c'est DISPLAYCONFIG_PATH_INFO, c'est près de 10 struct dans WinGDI.h et WinUser.h, disponible sous C++Builder XE3 mais pas semble-t-il dans Delphi XE3
La traduction de ces headers C++ vers Delphi sera longue :
Code:
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 typedef struct DISPLAYCONFIG_PATH_INFO { DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo; DISPLAYCONFIG_PATH_TARGET_INFO targetInfo; UINT32 flags; } DISPLAYCONFIG_PATH_INFO; typedef struct DISPLAYCONFIG_PATH_SOURCE_INFO { LUID adapterId; UINT32 id; UINT32 modeInfoIdx; UINT32 statusFlags; } DISPLAYCONFIG_PATH_SOURCE_INFO; typedef struct DISPLAYCONFIG_PATH_TARGET_INFO { LUID adapterId; UINT32 id; UINT32 modeInfoIdx; DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology; DISPLAYCONFIG_ROTATION rotation; DISPLAYCONFIG_SCALING scaling; DISPLAYCONFIG_RATIONAL refreshRate; DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering; BOOL targetAvailable; UINT32 statusFlags; } DISPLAYCONFIG_PATH_TARGET_INFO; ... encore un tas de struct