Avatar billede futterama Nybegynder
12. februar 2004 - 11:04 Der er 24 kommentarer og
2 løsninger

Understregninger i en MainMenu

Hejsa,

Når man opretter en MainMenu kan man få understregninger under et bogstav i menupunketet ved at sætte & foran bogstavet. Dette aktiverer også Alt+bogstav så man kan trykke f.eks. Alt+F for at få Filer menuen frem. Yes, men den lille streg under F kommer først til syne idet man trykker på Alt.

Hvordan får man stregen til at være der altid?

Eksempel: Notepad i Windows 2000 har ingen understregninger før man trykker på Alt. Men det har Word 2000! Se selv efter ;-)

Kom med et bud :-)
Avatar billede borrisholt Novice
12. februar 2004 - 11:17 #1
Du sætter et & foran bogstavet
Avatar billede futterama Nybegynder
12. februar 2004 - 12:01 #2
Som jeg skrev, de bliver ikke vist. Læs mit indlæg igen, så ser du at jeg HAR prøvet med & foran bogstavet.

Prøv igen :-p
Avatar billede hmann Nybegynder
12. februar 2004 - 12:58 #3
måske er det noget windows-halløj!

prøv at gå i Start -> Indstillinger -> Kontrolpanel -> Skærm -> Udseende (faneblad) -> Effekter...

Der er en check box der kan krydses af:
"Skjul understregede bogstaver til tastaturnavigering, indtil jeg trykker på ALT-tasten"
Avatar billede hmann Nybegynder
12. februar 2004 - 13:00 #4
og du skal selvfølgelig sørge for at den ikke er krydet af, så man altid ser understregningerne :)
Avatar billede futterama Nybegynder
12. februar 2004 - 13:09 #5
Hej hmann,

Du har jo ret på en måde... men det skulle jo gerne være mit program der slog den fra og til så... måske der er en key i reggen som programmet kan gå ind og fedte med. Spørgsmålet er hvordan programmer som Winword gør det...

PS. Kommer der ikke en programmeringsløsning går pointene til hmann ;-)
Avatar billede hmann Nybegynder
12. februar 2004 - 13:34 #6
har vi nogen idé om hvad denne key i regedit hedder eller hvor den ligger?
Avatar billede futterama Nybegynder
12. februar 2004 - 13:40 #7
Overhovedet ikke, men jeg har måske lige fundet noget... jeg åbnede regedit og eksporterede hele databasen, derefter fjernede fluebenet i checkboxen og eksporterede igen. Så sammenlignede jeg indholdet af de to filer med Total Commander og den fandt 6 forskelle, nogle af dem fra antivirusprogrammet (LastScanned key) og en anden hedder "UserPreferencesMask" som ifølge hvor den ligger i databasen kunne være noget... vi ser ad når jeg lige har testet :-)
Avatar billede hmann Nybegynder
12. februar 2004 - 13:42 #8
smart.. jeg har lige sidder og leder nettet igennem for info..
jeg kan sagtens programmere det i delphi, hvis jeg bare vidste hvor i regdb man skulle lede! ellers må microsoft ha noget om alle windows variabler..
Avatar billede futterama Nybegynder
12. februar 2004 - 13:52 #9
Hey, hvis du vil tjene lidt point, så lær mig at rette den key i regdb.

Dette er hvad jeg har fundet ud af:

Den key der hedder: "UserPreferencesMask"
på denne placering: [HKEY_USERS\S-1-5-21-1072371120-1553159783-925700815-16333\Control Panel\Desktop]
antager disse to værdier:
9e 3e 00 80 -Med flueben i checkboxen
be 3e 00 80 -Med flueben i checkboxen

Hvordan retter man så lige dem fra det ene til det andet? Show me :-)
Avatar billede futterama Nybegynder
12. februar 2004 - 13:53 #10
Hovsa, copy-paste lidt for vildt... be 3e 00 80 -UDEN flueben i chechboxen
Avatar billede futterama Nybegynder
12. februar 2004 - 14:03 #11
Der er to andre keys der ændrer sig, og om de har noget at sige ved jeg ikke, men manuel ændring af den ovenstående key virker ikke.

De andre to er:

[HKEY_USERS\S-1-5-21-1072371120-1553159783-925700815-16333\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\*]
"MRUList"="hcedibjagf" -Uden flueben
"MRUList"="chedibjagf" -Med flueben

[HKEY_USERS\S-1-5-21-1072371120-1553159783-925700815-16333\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\reg]
"MRUList"="bca" -Uden flueben
"MRUList"="cba" -Med flueben
Avatar billede futterama Nybegynder
12. februar 2004 - 14:05 #12
Jeg venter pænt på din kode, hmann :-)
Avatar billede hmann Nybegynder
12. februar 2004 - 14:08 #13
rolig nu.. jeg har også lige et arbejde der skal passes samtidig :)
Avatar billede futterama Nybegynder
12. februar 2004 - 14:10 #14
Jeg er rolig (panikker) - jeg har også et arbejde, DETTE er mit arbejde ;-) men jeg slapper af og finder nogle andre små finurligheder som jeg kan bryde mit hoved med :-)
Avatar billede hmann Nybegynder
12. februar 2004 - 14:10 #15
hvis det ikke hjælper at ændre den manuelt, hjælper det vil heller ikke fra delphi? det er jo det samme der sker...

er på jagt efter om der ikke er en system-variabel der kan sættes istedet..

altså at ændre en nøgles værdi fra delphi er ikke noget problem, men hvis det ikke hjælper at ændre den er det jo ikke meget ved..
Avatar billede hrc Mester
12. februar 2004 - 15:51 #16
Det er ikke korrekt metode at gå ind i registreringsdatabasen og rette en værdi der begynder med S-1-5-21-1072371120-1553159783-925700815-16333 eller lignende. Dette er en UID og den er sandsynligvis dynamisk fra maskine til maskine (i andre tilfælde kan den i alt fald være det).

Her er et link til MSDN hvor den korrekte message er beskrevet:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardAccelerators/KeyboardAcceleratorReference/KeyboardAcceleratorMessages/WM_CHANGEUISTATE.asp

Jeg har selv brugt 10 sekunder på at lave noget Delfisk... Mangler en del og ved end ikke om det virker ... (gad ikke læse alt det engelske).

procedure TfrmMain.cbShowUnderlinesClick(Sender: TObject);
begin
  if (Sender as TCheckBox).Checked then
    SendMessage(self.Handle,WM_CHANGEUISTATE, MakeLong(UIS_CLEAR, UISF_HIDEACCEL), 0)
  else
    // Slå funktionen fra igen
end;
Avatar billede hrc Mester
12. februar 2004 - 15:53 #17
Tror der er en fejl i ovenstående, prøv det her:

if (Sender as TCheckBox).Checked then
  SendMessage(self.Handle,WM_CHANGEUISTATE, MakeLong(UIS_SET, UISF_HIDEACCEL), 0)
else
  SendMessage(self.Handle,WM_CHANGEUISTATE, MakeLong(UIS_CLEAR, UISF_HIDEACCEL), 0);
Avatar billede futterama Nybegynder
13. februar 2004 - 07:29 #18
Ideen er god, men jeg kan ikke få det til at virke, desværre :-(
Avatar billede hmann Nybegynder
13. februar 2004 - 08:11 #19
hrc> er godt klar over at det andet ikke er måden at angribe det på - skrev også at jeg var på jagt efter den system variabel, som du har fundet på MSDN.. det lykkedes mig bare ikke at finde den igår :)

futterama> nu hvor hrc har fundet noget beskrivelse, skal jeg se om jeg får tid til at kigge nærmere på det i løbet af dagen..
Avatar billede futterama Nybegynder
13. februar 2004 - 08:25 #20
hmann > det lyder godt, for jeg selv kan ikke hitte rede i det... :-)
Avatar billede hmann Nybegynder
13. februar 2004 - 09:06 #21
jeg kigger på det senere, men er det egentlig overhovedet "pænt", at gå ind og bestemme for brugeren hvordan han/hun vil se sine shortcuts? underlined eller ej?

vil det ikke svare lidt til, at når man starter dit program, ændrer du skærmopløsningen til en bestemt.. er det ikke noget brugeren selv skal styre?

nå men kigger som sagt på det senere...
Avatar billede futterama Nybegynder
13. februar 2004 - 09:11 #22
Word gør det... og det var egentlig også kun fordi at jeg syns man sku kunne se tastaturgenvejene med det samme... vi kan også droppe det, så deler jeg bare point ud som tak for hjælpen ;-) men det er op til dig/jer!
Avatar billede hmann Nybegynder
13. februar 2004 - 09:13 #23
giv mig lige lidt tid... det ville jo være fedest at finde ud af det... men har som tidligere nævnt arbejde/kunder som skal passes :-)
skal nok vende tilbage senere!
Avatar billede futterama Nybegynder
13. februar 2004 - 11:00 #24
You got all the time you need :-)
Avatar billede hmann Nybegynder
13. februar 2004 - 13:05 #25
nu har jeg rodet med det skidt uafbrudt et par timer...
... og er endt op med stort set det samme som hrc :)

SendMessage("Handle",WM_CHANGEUISTATE, MakeLong(UIS_CLEAR, UISF_HIDEACCEL), 0);
- så burde du kunne se understregningerne hele tiden..

ved ikke hvillken delphi-version du kører.. det kan måske hjælpe at tilføje dette:
  {$EXTERNALSYM WM_CHANGEUISTATE}
  WM_CHANGEUISTATE = $0127;
  {$EXTERNALSYM WM_UPDATEUISTATE}
  WM_UPDATEUISTATE = $0128;
  {$EXTERNALSYM WM_QUERYUISTATE}
  WM_QUERYUISTATE = $0129;
  UIS_CLEAR = 2;
  UISF_HIDEFOCUS = 1;
  UISF_HIDEACCEL = 2;

har testet dette og det virker med fx en TButton (altså udskift "handle" med fx Button1.Handle..

MEN kan ikke få det til at virke med TMainMenu.. har en idé om at det er fordi TMainMenu ikke er en TWinControl som fx TButton er det!

er da blevet meget nysgerrig og vil meget gerne vide hvis du finder en løsning på det, men jeg kan ikke bruge mere tid på det lige nu..
måske du skulle gribe fat i brugeren "borrisholt" - han plejer at have styr på windows variabler og messages..

mvh
HMann
Avatar billede futterama Nybegynder
13. februar 2004 - 13:21 #26
Jeg tror bare jeg lukker af her, og siger det var det, har heller ikke tid til at undersøge det nærmere, så jeg deler lidt point ud og så må det være det :-)

Takker for indsatsen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester