![]() |
AW: Virtual Piano
Nur mal so ’ne Anregung, da der Source ja jetzt anscheinend eh öffentlich ist: Wollt ihr nicht vielleicht ein richtiges Repository dafür aufsetzen, statt immer den Code hin- und herzukopieren? Google Code wäre z.B. eine Möglichkeit (man hat die Wahl zwischen SVN und Mercurial – ich würde letzteres empfehlen wegen des einfacheren Mergings) oder auch SourceForge. Wäre denke ich deutlich eleganter und weniger Arbeit für euch beide...
|
AW: Virtual Piano
Zitat:
gruss |
AW: Virtual Piano
vor allem könnt ihr dann gleichzeitig dran rumwerkeln und müsst nicht immer auf den anderen warten :-)
|
AW: Virtual Piano
Zitat:
Und Sourceforce spamt mir jetzt schon mein Postfach voll. Nach der erstellung von BassVis_Wrapper.. EDIT: Oder darf ich hier nicht mehr posten? :cry: gruss |
AW: Virtual Piano
Naja, so schlimm wird es ja nicht!
Ich brauch ja ne ganze weile. Erst wenn ich soweit fertig bin schick ich ihm die überarbeitete zu. EWeiss wird selbst nichts ändern, in meinem Sinne. Würde ich auch nicht verlangen, da es ja so schon funktioniert:wink: Es ging Ihm ja auch nicht darum was ich möchte, sondern um zu zeigen das man auch ohne VCL tolle Oberflächen gestallten kann. :thumb: Es wird also kein Codegespame in dieser hinsicht geben:wink: Der Rest erfolgt eh per Mail:P @NamenLozer: Idee ist gut, nur wie man sowas macht:gruebel: @blackfin: Warten muss er eh, bin ja nicht der schnellste:zwinker: Gruss alfold |
AW: Virtual Piano
Zitat:
gruss |
AW: Virtual Piano
@NamenLozer
Wenn du zeit hast kannst nochmal testen ob die Listbox jetzt bei dir funktioniert? Hab da einiges umgestellt vor allem was das ansprechen der ClientProc aus der DLL angeht. Zusätzlich noch einen visuellen Rect erstellt für Selektierte Auswahl. gruss |
AW: Virtual Piano
Liste der Anhänge anzeigen (Anzahl: 1)
Leider nein :(
Beim Start kommt jetzt die Meldung im Anhang (vorher passierte gar nichts, und das Programm hing nur). |
AW: Virtual Piano
Zitat:
Kann mit dem Skin bzw.. dem einlesen der Instrumentenlisten zu tun haben wenn die nicht korrekt sind. (Alte Version) Danke für's testen. Das linken auf die WinProc der Hauptanwendung sollte eigentlich so OK sein!
Delphi-Quellcode:
nachdem ich das Handle habe initialisiere ich die Subclass
FClientInstance,
FPrevClientProc: TFNWndProc;
Delphi-Quellcode:
SubClass(FHandle);
Delphi-Quellcode:
procedure TSkinListBox.SubClass(WinHandle: HWND);
begin FClientInstance := MakeObjectInstance(ClientWndProc); FPrevClientProc := Pointer(GetWindowLong(WinHandle, GWL_WNDPROC)); SetWindowLong(WinHandle, GWL_WNDPROC, Integer(FClientInstance)); end;
Delphi-Quellcode:
procedure TSkinListBox.ClientWndProc(var Message: TMessage);
begin with Message do begin case Msg of WM_ERASEBKGND: Result := ListBoxProc(FHandle, integer(Msg), Message.WParam, Message.LParam); WM_MOUSEWHEEL: Result := ListBoxProc(FHandle, integer(Msg), Message.WParam, Message.LParam); WM_PAINT: Result := ListBoxProc(FHandle, integer(Msg), Message.WParam, Message.LParam); WM_LBUTTONUP: Result := ListBoxProc(FHandle, integer(Msg), Message.WParam, Message.LParam); WM_KILLFOCUS: Result := ListBoxProc(FHandle, integer(Msg), Message.WParam, Message.LParam); end; if (Result = 0) then Result := CallWindowProc(FPrevClientProc, FHandle, Msg, wParam, lParam); end; end; und dann.. bla bla
Delphi-Quellcode:
Kann mir jetzt nicht vorstellen das es daran liegen könnte (vermutung)
function TSkinListBox.ListBoxProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): LRESULT; stdcall;
begin ... Result := CallWindowProc(Pointer(FPrevClientProc), WinHandle, Msg, wP, lP); end; das die ListBoxProc privat deklariert ist. gruss |
AW: Virtual Piano
Moment mal – deine WndProc ist eine Methode eines Objekts? Woher soll denn dann der implizite Parameter
Delphi-Quellcode:
kommen, wenn die WndProc von Windows aufgerufen wird? Das könnte durchaus der Grund für den Crash sein.
self
Änder doch mal die Deklaration in
Delphi-Quellcode:
. Das ist dann quasi wie eine „normale“ Procedure, nur in einer Klasse deklariert.
class procedure TSkinListBox.ClientWndProc(var Message: TMessage); static;
edit: Okay, sorry, kannte
Delphi-Quellcode:
nicht. Gerade nachgelesen, was das ist – damit sollte es wohl doch in Ordnung sein.
MakeObjectInstance
edit 2: Allerdings könnte es sein, dass diese Methode mit der Datenausführungsverhinderung DEP (die ich aktiviert habe) in Konflikt gerät. Denn anscheinend wird dabei Code on-the-fly generiert/alloziiert, allerdings konnte ich nirgends sehen, dass für den Speicherbereich das
Delphi-Quellcode:
-Flag gesetzt würde. Vielleicht könntest du es ja doch mal so probieren, wie ich oben vorgeschlagen habe?
PAGE_EXECUTE
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 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