12. februar 2004 - 11:04Der 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 ;-)
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 ;-)
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 :-)
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..
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 :-)
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 :-)
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:
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;
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);
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..
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?
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!
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!
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..
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!
Synes godt om
Ny brugerNybegynder
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.