![]() |
Re: Übersetzung Class MagneticWindow
Genau das sorgt ja für die Rekursion. Die Property heisst SnapWidth. Der Getter heist GetSnapWidth. Wenn innerhalb des Getters wieder SnapWidth steht, wird die Property angesprochen. Diese ruft den Getter auf etc. Der ursprüngliche Tip mit der Klassenvervollständigung kam nicht von mir.
|
Re: Übersetzung Class MagneticWindow
Zitat:
Code:
Bei Let wird der neue Wert m_lSnapWidth zugewiesen wenn
Public Property Get SnapWidth() As Long
SnapWidth = m_lSnapWidth End Property Public Property Let SnapWidth(ByVal New_SnapWidth As Long) m_lSnapWidth = New_SnapWidth End Property dieser übergeben wird ..
Code:
und in der Public Variablen m_lSnapWidth gespeichert.
Private Sub Class_Initialize()
'-- Default snap width m_lSnapWidth = 10 // Hier wird er übergeben beim initialisieren der klasse '-- Initialize array (handled windows info) ReDim m_uWndInfo(0) As WND_INFO m_lWndCount = 0 End Sub Über 'Get SnapWidth' kann ich die Variable abfragen welchen aktuellen wert sie hat. Klappt in VB !:) gruß |
Re: Übersetzung Class MagneticWindow
Hallo,
Zitat:
In Delphi sehen Getter und Setter so aus:
Delphi-Quellcode:
Zusätzlich wird unter private ein Feld FSnapWidth angelegt, in dem die Werte dann gespeichert werden.
function TMagnetic.GetSnapWidth: Integer;
begin Result := FSnapWidth; end; procedure TMagnetic.SetSnapWidth(const Value: Integer); begin FSnapWidth := Value; end; Gruß xaromz |
Re: Übersetzung Class MagneticWindow
So gehts !
Delphi-Quellcode:
Danke.
WMSZ_LEFT, WMSZ_TOPLEFT, WMSZ_BOTTOMLEFT:
begin case Abs(rcTmp.x1 - x1) < SnapWidth of True: rcWnd.x1 := x1; end; case Abs(rcTmp.x1 - x2) < SnapWidth of true: rcWnd.x1 := x2; End; End; Gruß |
Re: Übersetzung Class MagneticWindow
Zitat:
Warum wird dann in der procedure nicht auch GetSnapWidth übergeben
Delphi-Quellcode:
anstatt
property SnapWidth: Integer read GetSnapWidth write SetSnapWidth;
Delphi-Quellcode:
GetSnapWidth wird dann doch nirgends aufgerufen oder?
property SnapWidth: Integer read FSnapWidth write SetSnapWidth;
gruß |
Re: Übersetzung Class MagneticWindow
Man kann beide Möglichkeiten verwenden. Solange der Getter nur einen Wert zurückliefert, kann man sich die Get-Funktion sparen und direkt den Wert über die read-Direktive ansprechen. Anders sieht es aus, wenn der Getter aktiv einen Wert ermittelt.
Und man sollte die Get/Set-Funktionen nur in der Deklaration anwenden. Entweder man spricht innerhalb derselben Klasse direkt die Variablen an (in Sonderfällen, wenn man z.B. Rekursion vermeiden will) oder über den Namen der Property. Innerhalb einer Klasse mit einfachen Set/Get gilt ja Property <=> Getter <=> Feld. |
Re: Übersetzung Class MagneticWindow
Schwierig!!
Dieser Hexadezimale String
Delphi-Quellcode:
sSubCode := '5589E583C4F85731C08945FC8945F8EB0EE80000000083F802742185C07424E830000000837DF800750AE838000000E84D0000005F8B
45FCC9C21000E826000000EBF168000000006AFCFF7508E800000000EBE031D24ABF00000000B900000000E82D000000C3FF7514FF75 10FF750CFF75086800000000E8000000008945FCC331D2BF00000000B900000000E801000000C3E32F09C978078B450CF2AF75248D451 4508D4510508D450C508D4508508D45FC508D45F85052B800000000508B00FF501CC3' wird über eine split function in Byte konvertiert und in einen statischen Buffer kopiert. Jetzt kommt in Delphi die meldung String zu lang! EDIT: habs versucht mit WideString, PWChar usw ... Hat sich erledigt!
Delphi-Quellcode:
gruß
If (sc_aBuf[1] = 0) Then
Begin //Build the hex pair subclass string sSubCode := '5589E583C4F85731' + 'C08945FC8945F8EB' + '0EE80000000083F8' + '02742185C07424E8' + '30000000837DF800' + '750AE838000000E8' + '4D0000005F8B45FC' + 'C9C21000E8260000' + '00EBF16800000000' + '6AFCFF7508E80000' + '0000EBE031D24ABF' + '00000000B9000000' + '00E82D000000C3FF' + '7514FF7510FF750C' + 'FF75086800000000' + 'E8000000008945FC' + 'C331D2BF00000000' + 'B900000000E80100' + '0000C3E32F09C978' + '078B450CF2AF7524' + '8D4514508D451050' + '8D450C508D450850' + '8D45FC508D45F850' + '52B800000000508B' + '00FF501CC3'; |
Re: Übersetzung Class MagneticWindow
Hm...
Erhlich gesagt finde ich, du solltest dich erstmal mit der Sprache auseinandersetzen. Eine native, kompilierte, statisch geprüfte, objektorientierte Sprache verhält sich komplett einfach komplett[1] anders als ein interpretiertes Skript. Es gibt einige Tutorials bei DSDT.de, sehr nett ist auch ![]() Was du da gerade machst ist ein VB "Programm" Stück für Stück zu Delphi rüberzufriemeln. Was am Ende dabei rauskommt ist dann ein VB Programm in Delphi-Syntax. Wenn du es ganz locker angehst, und einfach mit der Sprache spielst(siehe Tutorials, Beispiele hinter den Links oben) bevor du eine wirkliche Anwendung baust/portierst, wirst du vllt schneller/besser die Eleganz hinter der Art & Weise entdecken in der Delphi Objektorientierung implementiert. Order einfach die Tatsache, dass ein Stringliteral in Delphi max. 255 Zeichen lang ist. :zwinker: Dass Problem wird wohl sein, dass je mehr Erfahrung man in VB hat, umso schwieriger wird es sein, seine Erfahrungen komplett wegzuwerfen und neu anzufangen. Genau das müsstest nämlich machen. ;) [1]ich meine "komplett anders" im Sinne von "Ähnlichkeiten sind eher zufällig" |
Re: Übersetzung Class MagneticWindow
Zitat:
Aber warum soll man gute (bewährte klassen ) aus VB nciht nach Delphi portieren können. Denke mal das man auch so lernen kann wenn auch etwas umständlicher. :? Aber grundsätzlich gebe ich dir Recht! :-D Zitat:
EDIT:So unterschiedlich von der Syntax her ist VB/Delphi nun auch wieder nicht! Wenn es dann mal übersetzt ist fragt niemand mehr auf welche weise dies geschehen ist Wie willst du dann noch den ansatz oder ähnlichkeiten zu VB erkennen? Wenn hier jemand einen Quelltext oder codeschnipsel aus den Forum verwendet interessiert es ihn auch nicht wie der Author den erstellt hat.Für ihn zählt nur das er es verwenden kann. Also! Am ende zählt das ergebniss wie man dahin gelangt ist letztendlich egal. gruß |
Re: Übersetzung Class MagneticWindow
Zitat:
Ich sage nicht, dass es unmöglich ist. Ich habe mir bis jetzt jede Programmiersprache selbst beigebracht, aber ich gehöre auch eher zu den Masochisten. :mrgreen: Zitat:
Zitat:
Was du oben gemacht hast ist einen String aus mehren Literalen zusammenzusetzen, die < 255 sind. ;) Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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 by Thomas Breitkreuz