AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ich finde keine ChildHandles beim TSaveDialog ...
Thema durchsuchen
Ansicht
Themen-Optionen

Ich finde keine ChildHandles beim TSaveDialog ...

Ein Thema von FriFra · begonnen am 19. Aug 2005 · letzter Beitrag vom 1. Mai 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#21

Re: Ich finde keine ChildHandles beim TSaveDialog ...

  Alt 20. Aug 2005, 17:10
Hm... irgendwas mach ich wohl falsch...
http://www.frifra.de/Temp/varerf.jpg
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Ich finde keine ChildHandles beim TSaveDialog ...

  Alt 20. Aug 2005, 18:54
also in meinem D2005 funktionierts. Hier mal die komplette unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TWindowproc = function(AHandle: Cardinal; uMsg: Cardinal; AWPARAM: wParam; ALPARAM: lParam): LResult;
  TForm1 = class(TForm)
    Button1: TButton;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure SaveDialog1Show(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var GOldProc: TWindowProc;

function NewWindowProc(AHandle: Cardinal; uMsg: Cardinal; AWPARAM: wParam; ALPARAM: lParam): LResult; Stdcall;
begin
  result := GOldProc(AHandle, uMsg, AWParam, ALParam);
end;

procedure TForm1.SaveDialog1Show(Sender: TObject);
begin
  GOldProc := TWindowProc(SetWindowLong(SaveDialog1.Handle, GWL_WNDPROC, Integer(@NewWindowProc)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveDialog1.Execute();
end;

end.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#23

Re: Ich finde keine ChildHandles beim TSaveDialog ...

  Alt 22. Apr 2006, 11:13
Ist schon pracktisch solch ein Thema zu finden, welches gleich in doppelter Hinsicht passt

eigentlich wollte ich ja erst sowas sagen,
Delphi-Quellcode:
Ich würde mal versuchen rauszubekommen, wie das z.B. Notepad macht, denn der hat auch seine eigene Beschriftung und ohne das es flackert.

Bei meinem Notepad steht [b]Dateiname[/b] und [b]Dateityp[/b], aber in den originalen Open-/Save-Dialogen steht bei mir [b]Objektname[/b] und [b]Objekttyp[/b] (im SaveDialog allerdings [b]Dateityp[/b] :gruebel: )
aber inzwischen hat sich hier einiges geändert, bei mir funktionier das mit dem Übersetzen auch ganz gut und ich benötige dafür nur eine Zeile ^^
SendMessageW(GetDlgItem(hWnd, 1), WM_SETTEXT, 0, Integer(PChar('abc123'))); Im Brunde bräuchtet ihr euch nur in den ExplorerHook des Dialogs einschalten, bei Msg = WM_NOTIFY und POFNotifyExW(LParam)^.hdr.code = CDN_INITDONE.
Oder, wenn's reicht ins onShow-Ereignis (wird über's ExplorerHook aufgerufen).

Ich persönlich hab hier meinen eigenen ExplorerHook, daher isses wohl etwas einfacher



Zu dem Handle-Problem:
Dat hab'sch aus'm MSDN - das über GetOpenFileName/GetSaveFileName-Fenster enthält seit Win2K/NT vermutlich sowas wie ein Explorer-Fenster, welches wohl jetzt die WindowsMessages an den ExplorerHook versendet, muß also erst das Handle auf das Dialog-Fenster geholt werden.
Zitat von MSDN:
[in] Handle to the child dialog box of the Open or Save As dialog box. Use the GetParent function to get the handle to the Open or Save As dialog box.
Luckie hat das inzwischen auch schon "irgendwie" mitbekommen und holt sich jetzt perhWnd := GetParent(hWnd); das richtige Fenster, mit den gesuchten Controls, herran.



Ach ja, hab auch etwas gebraucht und diese Fenster bisher entziffert.
(bis auf 0 und 1088 ... keine Ahnug was das ist)
Code:
#32770 DialogName
0        ?
1      Öffnen-Button
2      Abbrechen-Button
1038   Hilfe-Button
1040   Schreibgeschützt-CheckBox
1088     ?
1089   Typ-Label
1090   Dateiname-Label
1091   SuchenIn-Label
1120   Datei-ListBox
1136   Typ-Edit
1137   SuchenIn-ComboBox
1148   Dateiname-Edit
1184   PlacesBar
Und Luckie ... WinSight hilft irgendwie auch nicht viel weiter
bei mir hat das nur die beiden SuchenIn-Controls entdeckt
(hab dann einfach mal in 'ner Schleife eines per GetDlgItem testen lassen)
Miniaturansicht angehängter Grafiken
winsight_161.jpeg  
Angehängte Dateien
Dateityp: exe project3__345.exe (402,5 KB, 17x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#24

Re: Ich finde keine ChildHandles beim TSaveDialog ...

  Alt 24. Apr 2006, 08:48
So, die letzten Contros wurden endlich entschlüsselt
Code:
#32770 » DialogName
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
1152 » Dateiname-Edit
1184 » PlacesBar
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#25

Re: Ich finde keine ChildHandles beim TSaveDialog ...

  Alt 28. Apr 2006, 12:43
Gleiches Problem ... neue Ursache

Dachte erst ich hätte mich beim Dateiname-Edit (ID 1148) verschrieben, aber als ich jetzt wieder daheim weiterproggen wollte ging es plötzlich nicht mehr (falsche ID), also nochmal gesucht und siehe da, ich hatte es richtig aufgeschrieben nur da ist es die ID 1152

Also ich hab für das selbe Editfeld bisher 2 IDs (WinXP mit und ohne SP)

Wie soll ich denn jetzt vorgehen ... kann ja schließlich nicht alle IDs, für alle Windowsversionen ermitteln und dann die passende verwenden?

Es ist zwar einfach an alle IDs der vorhanden Controls ranzukommen, aber wie kann ich mit Sicherheit feststellen welche ID welches Control darstellt?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#26

Re: Ich finde keine ChildHandles beim TSaveDialog ...

  Alt 1. Mai 2006, 09:30
Zitat von FriFra:
Der Vorteil wenn man über die ItemID geht liegt darin, ....
Tja, leider verändern sich ja anscheinend die IDs von Windows zu Windows

Aber zumindestens hab ich inzwischen alles so hinbekommen, daß jetzt die meißten Beschriftungen über ResourceStrings geladen und erfolgreich gesetzt werden (solange die DlgItemIDs stimmen)

Drüben der entsprechende QuellCode
http://www.delphipraxis.net/internal...=541243#541243
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz