![]() |
Anchor in nonVCL setzen
Ich hab mir per CreateWindowExW einige Controls erstellt und würde dieser ebenfalls (gern) automatisch ausgerichtet haben, ist das irgendwie möglich?
Also genauso, als wenn ich in der VCL die Anchor-Werte auf Unten+Rechts, oder Links+Unten+Rechts asetzen würde. |
Re: Anchor in nonVCL setzen
die Anchors sind VCL-Sache. Die VCL-Komponenten bekommen also mit wenn die größe geändert wird und setzen dementsprechend die Childs anhand der Anchors um.
|
Re: Anchor in nonVCL setzen
Also muß ich das wohl doch irgendwie alleine machen, oder kann man sich da an andere Komponenten dranhängen?
Es geht um die Open-/Save-Dialoge ... hab da was nachgerüstet und das verhält sich (wie's z.B. auch in Notepad bei der Codierung ist) nicht wie der Rest, wenn man den Dialog vergrößert. -.-'' [Anhang gelöscht] da drüben ist ist nochmal soeine Datei (der "falsch" beschriftete OK-Button sollte ja nicht stören) ![]() [grobe Rechtschreibprüfung durchlaufen] |
Re: Anchor in nonVCL setzen
Etwas ist aber dennoch komisch, wenn meine Komponenten nicht automatisch ausgerichtet würden, dann müßten die doch oben/links fest sein, aber sin sind unten/links fest, werden also irgendwie ausgerichtet :grübel:
Außerdem bekomm ich über meinen Explorer-Hook keine Rückmeldung über veränderung der Fenstergröße, kann also schonmal da nichts machen :cry: Da nun aber dennoch irgendwie meie Komponenten ausgerichtet werden, sollte es doch irgendwie möglich sein wie und wodurch und eventuell wie man das beeinflussen kann? |
Re: Anchor in nonVCL setzen
:grübel: edit to :gruebel:
Zitat:
Zitat:
|
Re: Anchor in nonVCL setzen
Also, normalerweise sollte doch die Komponente fest auf der X-Y-Position sitzen - sich also nicht relativ zur Ecke oben-link bewegen, wenn man das Formular vergrößert/verkleinert.
Aber du kannst es ja selber testen - dort bewegen sich meine Komponenten. Na ja, zumindestens hoch/runter (das links/rechts fehlt halt noch). - es sind die Label/Edits für Passwort und CompLevel > ![]() Demnach muß dort ja schon sowas wie ein Anchor gesetzt sein, oder seh ich das falsch? Allerdings nicht von mir im nonVCL, sondern in der WinAPI, also davon was auch die Originalkomponenten auf der Form verschiebt, und da auf der Form nicht alles auf die selbe Weise verschoben wird, muß es doch wohl auch irgendwie zu steuern sein. :gruebel: |
Re: Anchor in nonVCL setzen
Nein, es gibt keine Anchors in der WinAPI. Dies ist ein Feature der VCL. Wenn du dein Fenster mit CreateWindows(Ex) erstelllst, gibst du die Position relativ zur Clientarea links oben an. Soll sich dein Clientfenster der Parent anpassen, musst du auf die Nachricht WM_SIZE reagieren, wo du im lParam die neuen Maße der Clientarea bekommst:
Zitat:
|
Re: Anchor in nonVCL setzen
Tja, abgesehn vom ExplorerHook steht mein Programm aber sozusagen still und reagiert erst recht auf keine Messages eines fremden Fensters (denk ich ma?) und im ExplorerHook bekomm ich keine derartigen Messages.
Denn das Fenster, welches geändert wird wurde doch von GetSaveFileNameW erstellt und sendet seine Messages irgendwo anders hin :? Aber Fakt ist nunmal, daß sich meine Controls bewegen ... wie auch immer. |
Re: Anchor in nonVCL setzen
Hat dein Clientfenster eventuell zufälligerweise die ID eines vorhandenen Fensters? Anders kann ich es mir nicht erklären. Häng das Projekt mal mit Code an. Allerdings kann ich nicht versprechen, dass ich Zeit finde es mir so genau anzugucken, aber zu mindest sehen würde ich es gerne. ;)
|
Re: Anchor in nonVCL setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Also meine ID's sind 10 bis 103 und diese sind sonst nicht belegt.
Code:
Hatte sogar mal das übergebene Fenster-Handle auf 0 gesetzt (in der ButtonClick-Proczedur)
#32770 » DialogName
0 » OpenDialog-ClientBereich 1 » Öffnen-Button 2 » Abbrechen-Button [b]100 » Passwort-Label 101 » Passwort-Edit 102 » CompLevel-Label 103 » CompLevel-ComboBox[/b] 1038 » Hilfe-Button 1040 » Schreibgeschützt-CheckBox 1088 » Control-Butons (at top-right) 1089 » Typ-Label 1090 » Dateiname-Label 1091 » SuchenIn-Label 1120 » Datei-ListBox 1136 » Typ-Edit 1137 » SuchenIn-ComboBox 1152 » Dateiname-Edit 1184 » PlacesBar
Delphi-Quellcode:
Selbst in einem Program ohne Fenster ('ne DPR ohne Application und TForm's)
Param.hParent := 0;
... brachte auch nichts. Im OnSelectChange ist auch ein Code drin, welcher die Position vom PasswortEdit in der FormCaption anzeigt. Also nach 'ner Größenänderung des Formulars einfach mal die Markierung der Dateien ändern. Wie gesagt noch nicht ganz fertig, aber ich hoffe mal es sieht nicht all zu schlimm aus ._. PS: hast du nicht zufällig ein paar nonVCL-Tuts über CheckBoxen und ComboBoxen? vorallem meine ComboBox (CompLevel) ist überhaupt nicht so, wie sie sein soll :cry: |
Re: Anchor in nonVCL setzen
Zitat:
Nachtrag: Kann es sein, dass du deine Controlls unwissentlich auf eine Art Panel erzeugst, welches seine größe nicht ändert nur seine Position, deine Controlls sich aber damit natürlich nicht relativ zum Panel ändern?
Code:
Wenn du nun den Dialog vergrößerst, ändert sich in wirklichkeit nur das obere Panel mit dem Liostview für die Dateien, das untere mit deinem Controll bleibt unverändert und es wirkt nur so, als ob deine Controlls und die anderen Controlls ihre Positioin anpassen würden entsprechend der Größenänderung.
+---------------+
| | | Panel 1 | +---------------+ | | | Panel 2 | | | | Dein Controll | +---------------+ |
Re: Anchor in nonVCL setzen
Wenn ich das wüßte, aber ein Panel müßte doch auch als Control (Window) müßte doch dann auch als DialogItem aufzufinden sein, oder nicht? (gefunden hab ich aber kein weideres Control)
Die Position laß ich so berechnen:
Delphi-Quellcode:
Also das Edit relativ zu seinem Parent, welches aber definitiv (bin mir eigentlich sicher) die Form ist und worauf ich die Controls auch erstellt hab.
H := GetDlgItem(hWnd, 101);
GetWindowRect(H, a1); GetWindowRect([b]GetParent(H)[/b], a2); Form1.Caption := IntToStr(a1.Left - a2.Left) + ' ' + IntToStr(a1.Top - a2.Top); Und wenn da "nur" ein Panel wäre, dann sollten doch wohl die Buttons sich nicht nach rechts bewegen :gruebel: |
Re: Anchor in nonVCL setzen
Zumindest was das Aussehen Deiner Combobox angeht hätte ich was:
Delphi-Quellcode:
Du brauchst einmal den DROPDOWNLIST-Stil und zum zweiten bezieht sich die Höhenangabe bei so einer ComboBox auf den ausgeklappten Zustand und ist dann quasi eine maximale Höhe. Die genaue Höhe könntest Du noch anhand der Anzahl Deiner Einträge ausrechnen.
H := CreateWindowExW(WS_EX_CLIENTEDGE, 'COMBOBOX', '', WS_VISIBLE or WS_CHILD or CBS_DROPDOWNLIST,
a4.Left, a3.Top + (a3.Top - a2.Top), a4.Right, a2.Bottom+1000, hWnd, 103, 0, nil); Gruß, teebee |
Re: Anchor in nonVCL setzen
Das mit der ComboBox wurde schon geändert ^^ (dank Luckie)
und die höhe ich jetzt das 11-fache der Dateiname-Edit-Höhe, da ich 10 Einträge hab ^^ |
Re: Anchor in nonVCL setzen
Hab nun auch noch die ganzen, welche man per GetWindowLong erhält durchsucht und nichts gefunden, also wird wohl irgendwie innerhalb der FensterPorzedur wo ich nicht rankomme alles neu angeordnet und nur das, was auch ursprünglich zum fenster gehört ... konnte da zumindestens keine Bits entdecken, welche das steuern würden :cry:
Bleibt mir wohl nur noch die möglichkeit diese Prozedur zu überschreiben und es wirklich alles selbst machen zu müssen -.-'' |
Re: Anchor in nonVCL setzen
Vielleicht werden die IDs ja für irgendwelche im Normalfall nicht sichtbaren Fenster gebraucht. Hast du denn schon mal andere Zufällige IDs probiert?
|
Re: Anchor in nonVCL setzen
Die IDs sind schon OK, denn wenn ich nichts anlege, dann sind diese IDs auch nicht belegt.
meine IDs und die belegten IDs, wobei bisher zwar dieser ID-Breich frei war:
Code:
100 » Passwort-Label
101 » Passwort-Edit 102 » CompLevel-Label 103 » CompLevel-ComboBox
Code:
aber wie ich jetzt feststellen durfte, sind die anderen IDs nicht unbedingt fest ... siehe
0 » OpenDialog-ClientBereich
1 » Öffnen-Button 2 » Abbrechen-Button 1038 » Hilfe-Button 1040 » Schreibgeschützt-CheckBox 1088 » Control-Butons (at top-right) 1089 » Typ-Label 1090 » Dateiname-Label 1091 » SuchenIn-Label 1120 » Datei-ListBox 1136 » Typ-Edit 1137 » SuchenIn-ComboBox [color=#ff0000]1148 oder 1152[/color] » Dateiname-Edit 1184 » PlacesBar ![]() Wie gesagt, hier funktioinert alles, nur daß es halt anscheinend keine Möglichkeit gibt, daß meine Controls von der selben Routine neu gruppiert werden, welche sich auch schon um die Originalcontrols kümmert :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz