Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Editfelder über Button mit einer sggrid tabelle verbind


Sievo - Sa 25.09.10 18:38
Titel: Editfelder über Button mit einer sggrid tabelle verbind
Hi also ich habe ein Problem!

Und zwar möchte ich Daten über Editfelder in einer StringGrid Tabelle anzeigen!
Mein Problem ist das ich nicht weiß wie ich die verknüpfungen und wie genau die schleife aussehen soll!

Ich stell mir das als Trockenübung so vor! (Am besten den Screenshot dazu nehmen!!)

Ich gebe die Fahrzeugnummer ein und es wird überprüft welche zeile dieses Fahruzeug hat.
Dann nehm ich das Startdatum und es wird überprüft wo dieses Startdatum sich mit der Zeile des Fahrzeuges schneidet.
Dann wird dieses datum + die Gesamtdauer - 1 genommen und der Bereich wird markiert!
Die Zellen werden Verbunden und es wird die Kundennummer ins "Große-Feld" geschrieben!

Also so denk ich mir das aber mir fehlt das wissen so eine schleife zu bauen! Ich habe mich schon durch verschiedene tutorials gequält aber so eine verbindung hab ich leider nicht gefunden!

Ich wäre sehr dankbar wenn mir jemand bei so einer schleife helfen und sie auch erklären kann!

Vielen Dank

Gruß

Sievo!


MaPsTaR - So 26.09.10 10:38

Hoffe, ich habe das richtig verstanden, dass du eine Schleife suchst, um die gesuchten Zellen zu markieren.


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:
function TForm1.GetStartCell(vehiclenum: integer; startdate: TDate): TPoint;
var ActCol, ActRow: integer;
begin
  result := Point(-1, -1);
  for ActCol := 1 to StringGrid1.ColCount - 1 do
  begin
    if StringGrid1.Rows[0][ActCol] = DateToStr(startdate)
    then
    begin
      result.X := ActCol;
      for ActRow := 1 to StringGrid1.RowCount - 1 do
      begin
        if StringGrid1.Cols[0][ActRow] = 'LKW ' + IntToStr(vehiclenum)
        then
        begin
          result.Y := ActRow;
          break;
        end;
      end;
      break;
    end;
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
var select: TGridRect;
    SelStart: TPoint;
begin
  SelStart := GetStartCell(StrToIntDef(EVehicleNum.Text, -1), StrToDate(EStartDate.Text));
  if (SelStart.X > -1and (SelStart.Y > -1)
  then
  begin
    // Spalte Right bis Left markieren
    select.Left := SelStart.X + StrToIntDef(EDays.Text, 0) - 1;
    select.Right := SelStart.X;
    // Zeile Top bis Bottom markieren
    select.Top := SelStart.Y;
    select.Bottom := SelStart.Y;
    StringGrid1.Selection := select;
  end;
end;


Nach dem Vorgehen um Zellen zu verbinden, scheinst du bei deiner Recherche aber nicht gesucht zu haben, bist nicht wirklich der erste, der sich dafür interessiert...
Google: Delphi Stringgrid Zellen verbinden [http://www.google.de/search?client=opera&rls=de&q=Delphi+Stringgrid+Zellen+verbinden&sourceid=opera&ie=utf-8&oe=utf-8&lr=lang_de]


Sievo - So 26.09.10 11:43

Okay vielen Dank!

Hmm hab ich garnet gesehen hab dann wohl immer nach dem falschem Gesucht! Weil da steht in der Google Suche auch genau drin wie ich Zeilen Farblich markiere!

Zu deinem Quellcode ich verstehe die procedure aber die function ist mir noch ein wenig unklar!
Bin halt leider kein Delphi-Pro :(

Kann mir die vllt einer erklären wenn es keine Umstände macht?
Sonst würd ich einfach mal gucken was mein Handbuch hergibt ;)

Aber Vielen Dank!!!

Werd e sofort ausprobieren!!


Sievo - So 26.09.10 21:23

Hey erstmal Vielen Dank!

Funktioniert auch soweit!

Nu leider springt er nicht zu dem Feld welches selektiert wurde!

Kann man soetwas vllt machen das der selektierte Bereich Angezeigt wird?
Und wie bekomm ich es hin das die markierten Felder mit einer Farbe hinterlegt werden und aus einem weiterem Edit-Feld etwas in die Zellen geschrieben wird?