Toon posts:

[Delphi/C++] CreateWindowEx WS_SYSMENU vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een toolbar window gemaakt, als ik met de rechter muisknop op de toolbar click dan kan ik uit maximize/minimize kiezen terwijl ik die eigenlijk wil disabelen. Bij een normaal window is het zo dat maximize/minimize pas beschikbaar zijn als je WS_MAXIMIZEBOX en WS_MINIMIZEBOX in de windowflags opneemt.
Kan me misschien iemand zeggen hoe dat moet???????

Thanx :)

de volgende code heb ik gebruikt:

var rect:trect; //sla ik de window dimensies in op

hwnd:=CreateWindowex(WS_EX_TOOLWINDOW,pchar(className),pchar(caption),WS_SYSMENU,rect.Left,rect.Top,rect.Right-rect.Left,rect.Bottom-rect.Top,0,0,hInstance,nil);

Verwijderd

die knoppen komen uit het WS_SYSMENU.

Verwijderd

Die moet je er handmatig uithalen...

Reageer op een WM_NCCREATE

en dan zoiets:
code:
1
2
3
4
5
6
7
var
  SysMenu: HMENU;
begin  
  SysMenu := GetSystemMenu(Handle, False);
  EnableMenuItem(SysMenu, SC_MINIMIZE, MF_BYCOMMAND or MF_GRAYED);
  EnableMenuItem(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND or MF_GRAYED);
end;

In delphi is dwStyle trouwens WS_CLIPSIBBLINGS + WS_CAPTION + WS_SYSMENU + WS_CLIPCHILDREN

Verwijderd

Topicstarter
Bedankt diFool voor de code :)

Maar het werkt helaas nbij mij (nog) niet, zoals ik het heb toegepast.

Eventjes terzijde, voor het progje heb ik alleen een ToolbarWindow gecreeerd, dit is het hoofdwindow v/h progje.
(n.b. het progje met het maximize/minimize probleem is te downloaden, compiled versie, van www.beam.to/mco)

Ik heb de WM_NCCREATE afgevangen in de WindowProc en heb daar de volgende code neergezet:

In de WindowProc functie (case uMsg of.....)

WM_NCCREATE:
begin
Wmnccreate;
result:=defwindowproc (hwnd,message,wParam,lParam);
end;

En de procedure Wmnccreate:

procedure Wmnccreate;
var SysMenu: HMENU;
begin
SysMenu := GetSystemMenu(win._hwnd, False);
EnableMenuItem(SysMenu, SC_MINIMIZE, MF_BYCOMMAND or MF_GRAYED);
EnableMenuItem(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND or MF_GRAYED);
end;

Verwijderd

en als je
code:
1
2
Wmnccreate;
result:=defwindowproc (hwnd,message,wParam,lParam);

omdraait, dus
code:
1
2
result:=defwindowproc (hwnd,message,wParam,lParam);
Wmnccreate;

BTW code maak je zo: [code] de code [/code], lees de faq :)

Verwijderd

Topicstarter
Helaas geeft dat ook nog geen resultaat.........

Ik vind het maar raar dat Delphi(6) een toolbox window geeft dat je (via het system menu) kunt maximizen en minimizen.
Ik heb alleen maar de extended window flag WS_EX_TOOLWINDOW en de window flaf WS_SYSMENU toegepast.
Wel maak ik gebruik van translucency, misschien dat dat er iets mee te maken heeft?????????????
Op dezelfde manier heb ik voor dat programma ook een about dialogbox gemaakt met de window flags:
[code]
var DlgTemplate:TDlgTemplate;

DlgTemplate.Style:=WS_SYSMENU or WS_VISIBLE;
DlgTemplate.dwExtendedStyle:=WS_EX_TOOLWINDOW;
/[code]
en deze doet 't wel goed..............

Thanx for the help :) :) :)

Verwijderd

Topicstarter
(oeps...... foutje dubbele post...........)
Op vrijdag 18 januari 2002 00:23 schreef TSI2002 het volgende:
Helaas geeft dat ook nog geen resultaat.........

Ik vind het maar raar dat Delphi(6) een toolbox window geeft dat je (via het system menu) kunt maximizen en minimizen.
Ik heb alleen maar de extended window flag WS_EX_TOOLWINDOW en de window flag WS_SYSMENU toegepast.
Wel maak ik gebruik van translucency, misschien dat dat er iets mee te maken heeft?????????????
Op dezelfde manier heb ik voor dat programma ook een about dialogbox gemaakt met de window flags:
[code]
var DlgTemplate:TDlgTemplate;

DlgTemplate.Style:=WS_SYSMENU or WS_VISIBLE;
DlgTemplate.dwExtendedStyle:=WS_EX_TOOLWINDOW;
/[code]
en deze doet 't wel goed..............

Thanx for the help :) :) :)

Verwijderd

Weet je zeker dat de code uitgevoerd wordt? [Heb je een break-point gezet etc] Heb je de juiste handle gebruikt? Kun je de code later uitvoeren [bv door op een button te klikken]

De code komt zo'n beetje rechtstreeks uit de source van Delphi, en die moet hem ook uitvoeren anders krijg je ook die maximize en minimize keuzes.

edit:

Oh, ik zie nu dat je van je main-window een tool window hebt gemaakt :) Dan zou de code die ik gaf niet uitgevoerd hoeven te worden;

Komt het dan niet hier door: In een delphi application maakt object TApplication altijd een niet zichtbare main-window, waarvan alle andere windows dan weer childs zijn.

Dit doe jij misschien niet? [Ik ga er effe vanuit dat een [echte] mainwindow die ook toolwindow is, maximize en minimize laat zien]

Je kunt ook effe kijken of de functie DeleteMenu lukt, en zo niet GetLastError aanroepen.

Voor de rest weet ik het zo niet :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Ik snap geen k*t van je vraag om eerlijk te zijn...? Wat doet C++ in de topic-title terwijl het een pure Delphi-vraag is? :?

Ennuh om het nog onduidelijker te maken, waarom ga je in Delphi in GODESNAAM de WinAPI gebruiken om een window aan te maken?!?!?!? |:(
Op vrijdag 18 januari 2002 00:23 schreef TSI2002 het volgende:
Ik vind het maar raar dat Delphi(6) een toolbox window geeft dat je (via het system menu) kunt maximizen en minimizen.
Als je het toolbox window dan ook met DELPHI aan zou maken ipv WinAPI zou je Delphi wel de schuld mogen geven....

Maak gewoon een TForm, ram de BorderStyle property van dat ding op bsToolWindow (of zo), ruk de biMaximize en biMinimize (en eventueel biSystemMenu) items uit de BorderIcons set waardoor ze ook niet beschikbaar zijn in het system menu, en als je dan nog ranzige dingen wil doen met transparency kun je dat inschakelen door API calls te doen op de Handle property van het form.

* curry684 snapt niet waarom mensen een omgeving met een fantastisch GUI-framework gebruiken om dan alsnog het GUI-chopwerk in Win32 API te doen... :Z

Professionele website nodig?


Verwijderd

Op vrijdag 18 januari 2002 01:44 schreef curry684 het volgende:
Ik snap geen k*t van je vraag om eerlijk te zijn...? Wat doet C++ in de topic-title terwijl het een pure Delphi-vraag is? :?
Ik snapte de vraag eigenlijk ook niet. Maar veel zaken zijn in Delphi en C++Builder aan elkar gelijk. Dit is er ook zo eentje. Als je bijv. in C++Builder naar de VCL kijkt zie je {$DELPHIIMPLEMENTATION} >:) o.i.d.
Ennuh om het nog onduidelijker te maken, waarom ga je in Delphi in GODESNAAM de WinAPI gebruiken om een window aan te maken?!?!?!? |:(
Dat snapte ik dus ook ff niet.
Als je het toolbox window dan ook met DELPHI aan zou maken ipv WinAPI zou je Delphi wel de schuld mogen geven....

Maak gewoon een TForm, ram de BorderStyle property van dat ding op bsToolWindow (of zo), ruk de biMaximize en biMinimize (en eventueel biSystemMenu) items uit de BorderIcons set waardoor ze ook niet beschikbaar zijn in het system menu, en als je dan nog ranzige dingen wil doen met transparency kun je dat inschakelen door API calls te doen op de Handle property van het form.
Helemaal mee eens; trouwens die transparancy hoeft toch niet meer via API calls (of heb ik dit vaud).
* curry684 snapt niet waarom mensen een omgeving met een fantastisch GUI-framework gebruiken om dan alsnog het GUI-chopwerk in Win32 API te doen... :Z
Soms kan dit toch nodig zijn. Vraag me niet wanneer, maar het zou kunnen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 18 januari 2002 10:09 schreef hvdberg het volgende:
Soms kan dit toch nodig zijn. Vraag me niet wanneer, maar het zou kunnen.
Ja tuurlijk kan het framework niet alles encapsuleren wat je mogelijkerwijs zou kunnen willen, maar ik heb in 5 jaar BCB gebruik nog nooit een window aan hoeven maken met CreateWindowEx, zou ook wel triest zijn als een GUI-framework je daarvoor onvoldoende mogelijkheden zou bieden... :D

Professionele website nodig?


Verwijderd

Topicstarter
Op donderdag 17 januari 2002 22:31 schreef DiFool het volgende:
Die moet je er handmatig uithalen...

Reageer op een WM_NCCREATE

en dan zoiets:
code:
1
2
3
4
5
6
7
var
  SysMenu: HMENU;
begin  
  SysMenu := GetSystemMenu(Handle, False);
  EnableMenuItem(SysMenu, SC_MINIMIZE, MF_BYCOMMAND or MF_GRAYED);
  EnableMenuItem(SysMenu, SC_MAXIMIZE, MF_BYCOMMAND or MF_GRAYED);
end;

In delphi is dwStyle trouwens WS_CLIPSIBBLINGS + WS_CAPTION + WS_SYSMENU + WS_CLIPCHILDREN
thanx 4 the help :) :) :)

ik heb de code nu in de "OnCreate" procedure van mijn project gezet, d.w.z. nadat ik "CreateWindowEx" gebruikt heb, en het progje doet het nu goed, de maximize en minimize mogelijkheid is nu disabled :) :) :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

hmm.. denk ik te simpel of had je gewoon de BorderIcons opties van een TForm niet gezien?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Op dinsdag 22 januari 2002 18:36 schreef Creepy het volgende:
hmm.. denk ik te simpel of had je gewoon de BorderIcons opties van een TForm niet gezien?
Creepy:
Als je de bovenstaande posts van mij gelezen hebt, zul je gemerkt hebben dat het hier gaat om een "niet standaard" Delphi app, d.w.z. een progje geschreven in "Win32 API" en "Pascal", gecompiled met "Delphi", dus geen "TForm" of zoiets dergelijks :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 22 januari 2002 19:29 schreef TSI2002 het volgende:
Creepy:
Als je de bovenstaande posts van mij gelezen hebt, zul je gemerkt hebben dat het hier gaat om een "niet standaard" Delphi app, d.w.z. een progje geschreven in "Win32 API" en "Pascal", gecompiled met "Delphi", dus geen "TForm" of zoiets dergelijks :)
Je hebt nog steeds geen enkele reactie gegeven op de posts van mij, hvdberg en Creepy's over waarom je perse de moeilijkst mogelijke weg wil volgen in een omgeving die het je in 2 regels code laat doen.

Professionele website nodig?


Verwijderd

Topicstarter
Op dinsdag 22 januari 2002 22:06 schreef curry684 het volgende:

[..]

Je hebt nog steeds geen enkele reactie gegeven op de posts van mij, hvdberg en Creepy's over waarom je perse de moeilijkst mogelijke weg wil volgen in een omgeving die het je in 2 regels code laat doen.
Okee dan...........
Ik ben een CPU/Memory monitor progje aan het maken (zie eventueel www.beam.to/mco ==> is wel een oude versie en de website is nog niet helemaal af).
Afbeeldingslocatie: http://hagen.let.rug.nl/~s1073605/mco/mcov11-screenshot1.JPG
Ik wil proberen dit progje qua omvang zo klein mogelijk en het cpu gebruik ook zo laag mogelijk te houden. Dus gebruik ik API functies en niet standaard Delphi comps (bij standaard Delphi is de exe al minimaal 250 kb ==> wel groot voor zo'n progje)...
En Delphi gebruik ik omdat ik C++ niet (zo goed) ken :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

Op dinsdag 22 januari 2002 22:24 schreef TSI2002 het volgende:

[..]

Okee dan...........
Ik ben een CPU/Memory monitor progje aan het maken (zie eventueel www.beam.to/mco ==> is wel een oude versie en de website is nog niet helmaal af).
[afbeelding]
Ik wil proberen dit progje qua omvang zo klein mogelijk en het cpu gebruik ook zo laag mogelijk te houden. Dus gebruik ik API functies en niet standaard Delphi comps (bij standaard Delphi is de exe al minimaal 250 kb ==> wel groot voor zo'n progje)...
En Delphi gebruik ik omdat ik C++ niet (zo goed) ken :)
Als je Delphi kent en toch alles met de API aan het doen bent, is de stap naar C(++) niet groot meer volgens mij.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Op dinsdag 22 januari 2002 22:24 schreef TSI2002 het volgende:

[..]
Ik wil proberen dit progje qua omvang zo klein mogelijk en het cpu gebruik ook zo laag mogelijk te houden. Dus gebruik ik API functies en niet standaard Delphi comps (bij standaard Delphi is de exe al minimaal 250 kb ==> wel groot voor zo'n progje)...
[kazige grap]
Het gaat niet om de grootte, maar wat je ermee doet!
[einde kazige grap]

Who cares hoe groot het is? Die 250KB compress je ook nog eens een keer, maakt allemaal niks uit. 500KB of 50KB, niemand die je programma er op zal afkraken. Maak nou gewoon een goede tool, en ga niet moeilijk doen met api calls die VCL voor je wrapt.

't Is maar een tip natuurlijk, dus feel free om het op de moeilijke manier te doen.

Motor-forum.nl


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 22 januari 2002 22:24 schreef TSI2002 het volgende:
En Delphi gebruik ik omdat ik C++ niet (zo goed) ken :)
Zoals Creepy ook al zegt is de stap naar C++ vanuit deze 'raw Delphi' aanpak miniem, en ik zou er dan als ik jou was wel voor gaan.

XP-taskmanager is trouwens maar 126kB maar trekt wel zo'n 40-50 DLL's binnen waardoor ie op runtime wel op 2,5Mb memory-usage uitkomt. Het formaat van de exe boeit geen k*t, het gaat erom wat er in zit. Als dat ding van jou maar 10kB groot is en op runtime 20Mb geheugen vraagt is het alsnog pointless.

Verbaast me erg dat je die Delphi app in 59kB gefrot hebt gekregen trouwens, overigens knalt het ding meteen als de tyfus als ik 'm onder XP start dus ik kan 'm niet echt functioneel beoordelen :Y)

Professionele website nodig?


Verwijderd

Topicstarter
Op dinsdag 22 januari 2002 23:22 schreef curry684 het volgende:

[..]

Verbaast me erg dat je die Delphi app in 59kB gefrot hebt gekregen trouwens, overigens knalt het ding meteen als de tyfus als ik 'm onder XP start dus ik kan 'm niet echt functioneel beoordelen :Y)
Je bedoelt dat het progje veel geheugen gebruikt als je 'm opstart, of is er iets anders mee loos???????????
:)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op woensdag 23 januari 2002 18:00 schreef TSI2002 het volgende:
Je bedoelt dat het progje veel geheugen gebruikt als je 'm opstart, of is er iets anders mee loos???????????
:)
2 woorden: Access Violation.

Professionele website nodig?


Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 00:51 schreef curry684 het volgende:

[..]

2 woorden: Access Violation.
Heb je het progje geprobeerd in Win 95/98/ME/NT 4.0 of in Windows 2000/XP ?????????????????????????

Thanx :)

Verwijderd

Curry: "overigens knalt het ding meteen als de tyfus als ik 'm onder XP start"
TSI2002: Heb je het progje geprobeerd in Win 95/98/ME/NT 4.0 of in Windows 2000/XP
Doe es een gok :z

Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 04:04 schreef Yarvieh het volgende:

[..]

Doe es een gok :z
Dit progje is getest in Windows XP en Windows 95, vandaar dat er 2 versies zijn uitgebracht, eentje met translucency ondersteuning en eentje zonder..... (mcov12.exe en mcov12_win9x.exe).
Als je de versie mcov12.exe draait onder win9x/NT 4.0 krijg je een foutmelding dat het progje een .dll functie (de translucency functie) probeert aan te roepen, die niet bestaat.
Misschien dat de "Access Violation" daar mee te maken heeft???????????????????/

Thanx :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 25 januari 2002 14:41 schreef TSI2002 het volgende:
Dit progje is getest in Windows XP en Windows 95, vandaar dat er 2 versies zijn uitgebracht, eentje met translucency ondersteuning en eentje zonder..... (mcov12.exe en mcov12_win9x.exe).
Als je de versie mcov12.exe draait onder win9x/NT 4.0 krijg je een foutmelding dat het progje een .dll functie (de translucency functie) probeert aan te roepen, die niet bestaat.
Misschien dat de "Access Violation" daar mee te maken heeft???????????????????/
Ik klik onder een NT-OS echt niet op de Win9x-versie van het ding hoor ;)

mcov12.exe knalt bij mij onder XP consequent aan stukken... ;(

Professionele website nodig?


Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 23:58 schreef curry684 het volgende:

[..]

Ik klik onder een NT-OS echt niet op de Win9x-versie van het ding hoor ;)

mcov12.exe knalt bij mij onder XP consequent aan stukken... ;(
Wil je misschien eens proberen de 'mcov12.dta' file te verwijderen en dan het progje nog eens op te starten?????????????????????

Thanx :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Dat filetje is er niet tenzij ie een vreemde plek opzoekt om 'm te saven. Na het knallen volgens XP volgt er overigens consequent de volgende error in een nieuwe messagebox:
Exception Exception in module Mcov12_win9x.exe at 00008A23.
Unable to locate the "Processor" performance object.
Deze komt bij beide versies, vanzelfsprekend met een andere procesnaam :)

Professionele website nodig?


Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 23:58 schreef curry684 het volgende:

[..]

Ik klik onder een NT-OS echt niet op de Win9x-versie van het ding hoor ;)

mcov12.exe knalt bij mij onder XP consequent aan stukken... ;(
Curry:
Heb je XP Pro/Home?, NL/US? of US Build 2600?
Het progje is getest op XP US Build 2600 en daar doet het progje 't zonder problemen...

Thanx :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

XP Pro US version, release build 2600.

Mail de nieuwste versie eens een keer door?

Professionele website nodig?


Verwijderd

Topicstarter
Op zaterdag 26 januari 2002 20:23 schreef curry684 het volgende:
XP Pro US version, release build 2600.

Mail de nieuwste versie eens een keer door?
Okay, ik stuur je versie 1.4 naar het mail adres dat staat bij je profile...
N.B als de mail niet (of niet goed) is aangekomen, post dan een message... :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op zaterdag 26 januari 2002 21:16 schreef TSI2002 het volgende:
Okay, ik stuur je versie 1.4 naar het mail adres dat staat bij je profile...
Heb al screenshots van de crash-info teruggemaild... kut-XP-errorreports ondersteunen geen copy-paste |:(

Professionele website nodig?


Verwijderd

Topicstarter
Op zaterdag 26 januari 2002 22:25 schreef curry684 het volgende:

[..]

Heb al screenshots van de crash-info teruggemaild... kut-XP-errorreports ondersteunen geen copy-paste |:(
Curry:
Ik stuur je wel m'n source code (Delphi 6) naar je mail adres... :)

Verwijderd

Topicstarter
Curry:
Ik heb de "nieuwe" versie 1.4 "af", is te downloaden van

www.beam.to/mco

Afbeeldingslocatie: http://hagen.let.rug.nl/~s1073605/mco/images/tweakers.JPG

:) TSI2002

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Site dood? :?

Professionele website nodig?


Verwijderd

Topicstarter
Op maandag 28 januari 2002 18:50 schreef curry684 het volgende:
Site dood? :?
Er is net aan gewerkt, maar de site zou 't nu moeten doen...

www.beam.to/mco

:) TSI2002

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Het wordt een beetje saai, maarruh:
Mcov14.exe has encountered a problem and needs to close. We are sorry for the inconvenience.

If you were in the middle of something, the information you were working on might be lost.

Please tell Microsoft about this problem.
We have created an error report that you can send to us. We will treat this report as confidential and anonymous.
Enzovoorts... ;(

Professionele website nodig?


Verwijderd

Topicstarter
Op maandag 28 januari 2002 21:46 schreef curry684 het volgende:
Het wordt een beetje saai, maarruh:
[..]

Enzovoorts... ;(
Curry:
Ik heb net onder topic [topic=393753/1/25]
een en ander gevonden over mensen die dezelfde "performance counter" foutmelding van Windows kregen. Het blijkt dat je de onderdelen van de performance
counter aan en uit kunt zetten. Het kan zijn dat bij jou de performance counter voor de CPU gedisabled is, kijk anders eens onder het bovenstaande topic.
Misschien dat 't progje het dan wel doet...

:) TSI2002
Pagina: 1