AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ich krieg das Handle von abgeleitetem Edit nicht!
Thema durchsuchen
Ansicht
Themen-Optionen

Ich krieg das Handle von abgeleitetem Edit nicht!

Ein Thema von Red six · begonnen am 3. Aug 2005 · letzter Beitrag vom 5. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Red six

Registriert seit: 3. Aug 2005
23 Beiträge
 
#1

Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 22:26
Tag Leute,


Ich bin der Neue Hab aber schon viele sehr hilfreiche Infos in diesem Board gefunden. Danke dazu erstmal


Ich bin grade dabei mir n paar schön runde Komponenten zu basteln und hab mal mit TEdit angefangen. Dazu muss ich erstmal sagen dass ich nur sehr wenig Ahnung von OOP hab. Naja also hab ich die Klasse TRoundEdit erstellt und zu anfang gleich bemerkt dass TEdit scheinbar kein Canvas unterstüzt. Also hab ichs halt selber gemacht:

Delphi-Quellcode:
Canvas: TCanvas;

begin
Canvas := TCanvas.Create;
Canvas.Handle := GetDC(TRoundEdit.Handle);
end;
Tja und da liegt auch mein Problem, meine Klasse will die Device Control (das heißt doch so oder? ) nicht rausrücken... Also meine Klasse hat garkeine property Handle. Hab dann gleich mal nachgeschaut obs bei Edit1.Handle geht, das ging. Also hab ich mir gedacht dass Handles vlt nur bei Objekten, nicht aber bei Klassen vorhanden sind. Das wär allerdings sehr komisch, ich mein wie sollte man dann jemals was weiterentwickeln an den klassen

Also könnte mir plz schnell (will weitermachen ) jemand verraten was ich falsch mach? Danke schonmal!




mfg,




Red six


EDIT:


Oh oh sorry,

komisch ich war mir sicher den richtigen Bereich angeklickt zu haben

Naja plz move
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 22:32
anstelle von "TRoundEdit.Handle" musst du "Self.Handle" schreiben. Denn du willst ja das handle von der instanz.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Red six

Registriert seit: 3. Aug 2005
23 Beiträge
 
#3

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 22:36
Ah vielen dank



Red
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 22:49
eventuell verhält es sich mit der Canvas genau so, probier einfach mal ob es innerhalb der Komponente Self.Canvas gibt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Red six

Registriert seit: 3. Aug 2005
23 Beiträge
 
#5

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 22:53
Mh leider nein

Im moment hab ich aber ein anderes problem mit den Handles...

Achtung ich zeig mal den Code (lacht ja nicht ich mach sowas zum ersten mal)

Delphi-Quellcode:
constructor TRoundEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  Self.Ctl3D := False;

  Canvas := TCanvas.Create;
  Canvas.Handle := GetDC(Self.Handle);
end;

procedure TRoundEdit.Paint;
begin
  Canvas.RoundRect(Self.Left, Self.Top, Self.Width, Self.Height, 10, 10);
end;
Ist viel falsch?

Was bewegt da den Compiler dazu "Element hat kein übergeordnetes fenster" auszugeben? Ich hab hier mal gesucht und nen Thread von 2003 gefunden (den ich nicht wieder ausgraben wollte) und dort war auch das Problem irgentwie ein anderes... Naja...

Red
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 22:59
das problem ist das im Create noch kein Parent zugewiesen ist und daher auch der Fehler.
Ich tippe mal der Fehler kommt bei "Self.Ctl3D := False;" Führe diesen teil also erst aus wenn ein Parent zugewiesen ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Red six

Registriert seit: 3. Aug 2005
23 Beiträge
 
#7

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 3. Aug 2005, 23:03
Mh daran liegts leider nicht
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 4. Aug 2005, 07:07
Zitat von Red six:
Im moment hab ich aber ein anderes problem mit den Handles...

Achtung ich zeig mal den Code (lacht ja nicht ich mach sowas zum ersten mal)

Delphi-Quellcode:
constructor TRoundEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  Self.Ctl3D := False;

  Canvas := TCanvas.Create;
  Canvas.Handle := GetDC(Self.Handle);
end;

procedure TRoundEdit.Paint;
begin
  Canvas.RoundRect(Self.Left, Self.Top, Self.Width, Self.Height, 10, 10);
end;
Nur mal so ein paar Stichworte:

1. Dein Control ist von TEdit abgeleitet, das heißt, du bekommst alle "vererbten" Eigenschaften und Methoden mit dem Schlüsselwort inherited und nicht (wie du oben mal geschrieben hast), indem du "TRoundEdit." davor schreibst. Das "Self." davor kannst du auch weglassen.

2. Einen Canvas holt man sich nur, wenn man auch wirklich zeichnen will, und nicht schon vorher. Eben weil da ein HDC als Handle drin ist und das nicht ewig hält.

3. Du zeichnest nur dich, ggf. willst du danach auch noch das Edit-Control zeichnen mit "inherited Paint;"

4. Ein TEdit basiert auf einem nativen Windows-Control. Da ist das Ableiten schwieriger als bei einer reinen Delphi-Komponente. Manche Dinge, die du vielleicht im Sinn hast, gehen eventuell überhaupt nicht bzw. lassen sich nicht verändern.

Zitat von Red six:
Was bewegt da den Compiler dazu "Element hat kein übergeordnetes fenster" auszugeben? Ich hab hier mal gesucht und nen Thread von 2003 gefunden (den ich nicht wieder ausgraben wollte) und dort war auch das Problem irgentwie ein anderes... Naja...
Ist das wirklich eine "Compilermeldung" oder eine Fehlermeldung während der Laufzeit auf?
In welcher Zeile tritt der Fehler auf?
Wie erzeugst du dein Control?
Volker
  Mit Zitat antworten Zitat
Red six

Registriert seit: 3. Aug 2005
23 Beiträge
 
#9

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 4. Aug 2005, 15:56
Ok danke für deine Antwort!

Alsooo...

1) versteh ich nicht ganz was du meinst
2) Ok ich habs in die prozedur Paint gesteckt
3) inherited Paint geht leider nicht ("Undefinierter Bezeichner: 'Paint'") Kanns sein dass die Prozedur da anders heißt?
4) Mh also im moment hab ich blos ein normales editfeld, rund is da leider noch nix (Liegt demnach an obigen problem)
5) Ok sorry stimmt hab mich falsch ausgedrückt, es war ein Laufzeitfehler, wobei dieser mittlerweile auch beseitigt ist!

Delphi-Quellcode:
  
rnd := TRoundEdit.Create(MainForm);
rnd.Parent := MainForm;
rnd.Left := 10;
rnd.Top := 10;
Delphi-Quellcode:
constructor TRoundEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  self.Ctl3D := False;
end;

procedure TRoundEdit.Paint;
begin
  //inherited Paint;

  Canvas := TCanvas.Create;
  Canvas.Handle := GetDC(Handle);
  Canvas.RoundRect(Self.Left, Self.Top, Self.Width, 20, 10, 10);
  Canvas.Free; //das gleich hier rein?
end;


Red
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 4. Aug 2005, 16:59
Zitat von Red six:
1) versteh ich nicht ganz was du meinst
Deine Deklaration von TRoundEdit sieht so aus:
Delphi-Quellcode:
type
  TRoundEdit = class(TEdit)
    // bla bla bla
  end;
Dann kommst du an alles was du redefinierst über inherited xyz dran, hast du ja bei "inherited Paint;" schon versucht.

Zur 3) Ein Edit-Control kennt die Methode "Paint" nicht, weil Delphi hier nichts selbst zeichnet sondern das Control das macht (hatte ich oben unter 4 schon angedeutet). Du musst dann die Prozedur "PaintWindow" abfangen (musst du mal in Controls.pas nachsehen was die macht) oder noch eher die Meldung WM_PAINT.
Volker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:35 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