[Delphi] dynamische forms en private declarations?

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Anoniem: 4864

Topicstarter
Ik ben bezig met een programma'tje waarbij ik forms moet kunnen maken van 10 pixels breed. die forms worden dynamisch aangemaakt :

code:
1
2
3
4
5
 tick := tform.create(self);
 tick.caption := inttostr(i);
 tick.onclose := formclose;
 tick.width := 10;
 tick.show;


maar. nu moet ik nog een private declaration voor die form maken :

[code ]
private
{ Private declarations }
procedure WMGetMinMaxInfo(var Msg: TMessage); message wm_GetMinMaxInfo;
[ /code]

en de procedure daarvan :

[ code]
procedure TForm.WMGetMinMaxInfo(var Msg: TMessage);
type
PP = ^TP;
TP = Array[0..4] of TPoint;
begin
PP(Msg.LParam)^[3].X := 10; {10x10 - Minimum width/height}
PP(Msg.LParam)^[3].Y := 10;
PP(Msg.LParam)^[4].X := 3500; {3500x3500 - Maximum width/height}
PP(Msg.LParam)^[4].Y := 3500;
end;
[ /code]

Hoe kan ik dit nou dynamisch toewijzen in mijn code? want

code:
1
Tick.WMGetMinMaxInfo := WMGetMinMaxInfo;

werkt dus niet. (duh)

Iemand een oplossing?

Acties:
  • 0 Henk 'm!

Anoniem: 4864

Topicstarter
*swing*

Iemand?? Plieeeees???

:( code tag...

(je moet ff kijken bij edit als je het wat overzichtelijker wil zien)

Acties:
  • 0 Henk 'm!

  • Tom
  • Registratie: Juni 1999
  • Niet online

Tom

fuck man hoe krijg jij zo'n meid thuis terwijl je zoveel achter je pc hangt en moeilijke shit programmeert? Meiden zeiken meteen dat je dan een nerd bent... hoe doede gij da?

Kut ik ben offtopic bezig. lamaar :)

eh ik weet niet :P

Acties:
  • 0 Henk 'm!

Anoniem: 4864

Topicstarter
uhm... misschien omdat ik ook nog een IRL heb??? :P




8-)

Acties:
  • 0 Henk 'm!

Anoniem: 12514

Kan je die code niet ff opschonen... al die tags zijn gruwelijk irritant...

Ik heb wel ff gekeken... moet je dan niet de messageloop gaan overschrijven?

Maar.. als je de code nu ff zonder al die tags neerzet dan kijk ik nog wel ff

Acties:
  • 0 Henk 'm!

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 13:43
wat je denk ik het best kan doen is eerst een nieuwe form class maken die je overerft van een TForm. Daar maak je dan die WMGetMinMaxInfo msg handling al in.

Dan kan je gewoon je zelf gebakken formpje dynamisch maken.

tick := TMyForm.Create(Self);

happy coding...

Merijn

A software developer is someone who looks both left and right when crossing a one-way street.


Acties:
  • 0 Henk 'm!

Anoniem: 4152

Nog wat algemener: defenieer eerst een descendent van TForm en geef declareer daarbij een procedure (of functie) die je als parameters Array of Variant mee geeft (bijv. Tick.Myproc). Herdefenieer Tick.Create , geef deze een verwijzing naar de toe te wijzen procedure mee (zeg proc) en laat dan MyProc naar proc wijzen. Zo kun je op het laatste moment bepalen welke procedure je form krijgt. (als je in de help naar 'procedure of' zoek moet je wat nuttig info kunenn vinden)

suc6

Acties:
  • 0 Henk 'm!

Anoniem: 4864

Topicstarter
Ok. volgens mij ben ik nu al een heel eind... maar ja.. nu is dat eind zoek :(

de volgende code compilet, maar als ik m'n muiscursor over AOWNER (in delphi 4) hou, zie ik : AOwner = Inaccessible Value (als toolhint) WTF IS WRONG??? :?

Voor zover ik kan zien staat alles goed, maar zodra ik in een gecompilede versie een form probeer aan te maken (zie button1click) krijg ik een EResNotFound error :( (delphi debugger) en in het programma zelf zegt ie 'resource not found'

Plz help me!

(code)

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

Type
Tmyform = class(TForm)
private
procedure WMGetMinMaxInfo(var Msg: TMessage); message wm_GetMinMaxInfo;
public
constructor Create(Aowner:TComponent); override;
end;

var
Form1: TForm1;
Tick : TMyform;

implementation

{$R *.DFM}



constructor Tmyform.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
top := 0;
left := 0;
width := 10;
height := 100;
end;

procedure Tmyform.WMGetMinMaxInfo(var Msg: TMessage);
type
PP = ^TP;
TP = Array[0..4] of TPoint;
begin
PP(Msg.LParam)^[3].X := 10;
PP(Msg.LParam)^[3].Y := 10;
PP(Msg.LParam)^[4].X := 3500;
PP(Msg.LParam)^[4].Y := 3500;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Tick := Tmyform.create(self);
Tick.show;
end;

end.

Acties:
  • 0 Henk 'm!

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 30-04 11:59

IWriteCode

Less = more

Dat inaccessable van AOwner will niets zeggen.. als je dat tijdens het debuggen hebt... Dan is ie niet toegankelijk, maar dat houdt niet in dat het niet goed is.

Misschien is het probleem verholpen als je het TMyForm in een aparte unit maakt.
Wat volgens mij het probleem is... elk form heeft een DFM bestand. Dit probeert ie te laden...
Daarom zal ie dus wel de mist in gaan...
Als je nu een nieuw form aanmaakt in Delphi [met menus] en hierin de code van TMyForm toevoegd.. werkt dit dan wel?

Less = more


Acties:
  • 0 Henk 'm!

  • joepP
  • Registratie: Juni 1999
  • Niet online
Je moet niet 'inherited Create' maar 'inherited CreateNew' doen, dan werkt t allemaal perfect. Er komt iets meer kijken bij het aanmaken van een formpje dan je denkt...

Duik met de Code-Explorer maar eens in TForm -> TCustomForm -> Create -> etc.

Suc6!

Acties:
  • 0 Henk 'm!

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 13:43
sorry, fout mijnerzijds

joepP heeft gelijk...


Merijn

A software developer is someone who looks both left and right when crossing a one-way street.


Acties:
  • 0 Henk 'm!

Anoniem: 4864

Topicstarter
WHOEI! HIJ DOET UT!

THANK YOU JOEPPIE!! :) :) :) :)

Acties:
  • 0 Henk 'm!

Anoniem: 4864

Topicstarter
En als ik nu mijn muis boven AOwner houdt, geeft ie geen tooltip! :)
Pagina: 1