Autor Beitrag
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 05.03.07 20:10 
Ich programmiere gerade ein Schiffe versenken übers netzwerk mit zwei Stringgrids und da hab ich nun ein problem:
Ich muss die Schiffe einzeichnen können in einem der beiden stringgrids. Das möcht ich jetzt so machen das zuerst das 5 Felder große Schiff gesetzt wird, dann das 4 Felder große und so weiter.

Mein problem ist wie kann ich das machen das wenn man mit dem Mauszeiger über das stringgrid fährt, dass das Schiff das man setzen soll mitwandert. und wie mach ich die überprüfung ob sich das mit einem anderen Schiff überlagert?

lg el

bitte sagen wenns zu unverständlich war!

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 06.03.07 01:16 
Hallo,

hab Dir mal ein grobes Beispiel erstellt, aber bis Du damit zu Deinem Ziel kommst ist es noch ein weiter Weg :wink:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
  public
  aGridRect : TGridRect;
  procedure SetTempSchiff(aGridRect : TGridRect;i: Integer);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.SetTempSchiff(aGridRect : TGridRect;i: Integer);
var c,r : Integer;
begin
  for c := aGridRect.Left to aGridRect.Right do
    for r := aGridRect.Top to aGridRect.Bottom do
      StringGrid1.Objects[c,r] := Pointer(i);
  //durch das setzen von Objects wird OnDrawCell ausgelöst
end;

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var c,r : Integer;
begin
  StringGrid1.MouseToCell(X,Y,c,r);
  SetTempSchiff(aGridRect,0);//letzte Darstellung übermalen
  aGridRect := TGridRect(Rect(c,r,c,r+5));//5er Schiff
  SetTempSchiff(aGridRect,1);
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Integer(StringGrid1.Objects[aCol,aRow]) = 1 then
    StringGrid1.Canvas.Brush.Color := clRed
    else
      StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
  StringGrid1.Canvas.Fillrect(Rect);
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 06.03.07 18:28 
ok danke!
werd mir den code mal zu gemüte führen! :-)
Wenn ich den fertig hab mit allen Schiffen kann ich meinen Info lehrer beeindrucken. der hat nämlich gesagt das es viel zu kompliziert sein!
Tausend dank nochmal!

lg el

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.